C# में कार्य कतारें: शुरुआती लोगों के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: C# में कार्य कतारों की आवश्यकता क्यों है?

\n\n

कल्पना करें कि आप एक ऐसा एप्लिकेशन विकसित कर रहे हैं जो ऑनलाइन स्टोर में ऑर्डर प्रोसेस करता है। ग्राहक एक साथ अनुरोध भेजते हैं, और प्रत्येक अनुरोध में समय लगता है (जैसे, भुगतान जांच या ईमेल भेजना)। यदि उन्हें क्रमिक रूप से प्रोसेस किया जाए, तो एप्लिकेशन धीमा हो जाएगा और उपयोगकर्ताओं को इंतजार करना पड़ेगा। समाधान है कार्य कतार का उपयोग करना।

\n\n

कार्य कतार (Task Queue) एक डेटा संरचना है जो FIFO (First In, First Out — "पहले आया, पहले गया") सिद्धांत पर काम करती है। C# (.NET) में कतारें कई रूपों में लागू की गई हैं: सरल Queue<T> से लेकर थ्रेड-सुरक्षित ConcurrentQueue<T> तक। इस लेख में, हम समझेंगे कि कतारें कैसे बनाएं, कार्यों को कैसे जोड़ें और निकालें, और एसिंक्रोनस प्रोग्रामिंग में उनका उपयोग कैसे करें।

\n\n

यह लेख शुरुआती लोगों के लिए है, इसलिए हम मूल बातों से शुरू करेंगे और धीरे-धीरे अधिक जटिल उदाहरणों की ओर बढ़ेंगे।

\n\n

1. C# में Queue<T> के साथ बुनियादी काम

\n\n

क्लास Queue<T> नेमस्पेस System.Collections.Generic में स्थित है। यह एक सरल कतार है जो मल्टीथ्रेडिंग का समर्थन नहीं करती — इसका उपयोग केवल सिंगल-थ्रेड परिदृश्यों में किया जाना चाहिए।

\n\n

कतार बनाना और बुनियादी संचालन

\n\n

आइए स्ट्रिंग कार्यों को संग्रहीत करने के लिए एक कतार बनाएं:

\n\n
using System;\nusing System.Collections.Generic;\n\nclass Program\n{\n    static void Main()\n    {\n        // स्ट्रिंग की कतार बनाएं\n        Queue<string> taskQueue = new Queue<string>();\n\n        // कार्य जोड़ें (Enqueue)\n        taskQueue.Enqueue("ग्राहक को ईमेल भेजें");\n        taskQueue.Enqueue("ऑर्डर की स्थिति जांचें");\n        taskQueue.Enqueue("डेटाबेस अपडेट करें");\n\n        Console.WriteLine($"कार्यों की संख्या: {taskQueue.Count}");\n\n        // कार्य निकालें (Dequeue) — पहला तत्व हटाता है और लौटाता है\n        string firstTask = taskQueue.Dequeue();\n        Console.WriteLine($"निष्पादित कर रहे हैं: {firstTask}");\n\n        // अगले कार्य को हटाए बिना देखें (Peek)\n        string nextTask = taskQueue.Peek();\n        Console.WriteLine($"अगला: {nextTask}");\n\n        Console.WriteLine($"शेष कार्य: {taskQueue.Count}");\n    }\n}
\n\n

प्रोग्राम का आउटपुट:

\n
कार्यों की संख्या: 3\nनिष्पादित कर रहे हैं: ग्राहक को ईमेल भेजें\nअगला: ऑर्डर की स्थिति जांचें\nशेष कार्य: 2
\n\n

Queue<T> के महत्वपूर्ण तरीके

\n
    \n
  • Enqueue(item) — कतार के अंत में एक तत्व जोड़ता है।
  • \n
  • Dequeue() — पहले तत्व को हटाता है और लौटाता है। यदि कतार खाली है, तो InvalidOperationException अपवाद फेंकता है।
  • \n
  • Peek() — बिना हटाए पहला तत्व लौटाता है।
  • \n
  • Clear() — कतार को साफ करता है।
  • \n
  • Contains(item) — जांचता है कि तत्व कतार में है या नहीं।
  • \n
\n\n

महत्वपूर्ण: Queue<T> थ्रेड-सुरक्षित नहीं है। यदि कई थ्रेड एक साथ तत्वों को जोड़ते या निकालते हैं, तो त्रुटियां उत्पन्न होंगी। मल्टीथ्रेड परिदृश्यों के लिए ConcurrentQueue<T> का उपयोग करें।

\n\n

2. थ्रेड-सुरक्षित कतार: ConcurrentQueue<T>

\n\n

वास्तविक एप्लिकेशन में, कार्य अक्सर विभिन्न थ्रेड में जोड़े और प्रोसेस किए जाते हैं। इसके लिए .NET में ConcurrentQueue<T> है, जो नेमस्पेस System.Collections.Concurrent से है।

\n\n

उदाहरण: Producer-Consumer (उत्पादक-उपभोक्ता)

\n\n

कल्पना करें कि एक थ्रेड (Producer) कार्य उत्पन्न करता है, और दूसरा (Consumer) उन्हें निष्पादित करता है।

\n\n
using System;\nusing System.Collections.Concurrent;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static void Main()\n    {\n        ConcurrentQueue<string> queue = new ConcurrentQueue<string>();\n\n        // उत्पादक: कार्य जोड़ता है\n        \n                

ब्लॉग

पुस्तक अनुशंसाएँ