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

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

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

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

C# में टास्क क्यू के साथ काम करना: शुरुआती लोगों के लिए

\n\n

आधुनिक डेवलपमेंट में अक्सर ऐप के मुख्य थ्रेड को ब्लॉक किए बिना कई कार्यों को प्रोसेस करने की ज़रूरत होती है। एक वेब सर्वर की कल्पना करें जो सैकड़ों यूज़र्स को एक साथ जवाब देता है, या कोई बैकग्राउंड सर्विस जो फ़ाइल अपलोड को हैंडल करती है। ऐसी स्थितियों में टास्क क्यू (task queue) काम आता है — यह एक बुनियादी डेटा स्ट्रक्चर और प्रोग्रामिंग पैटर्न है।

\n\n

इस लेख में हम प्रैक्टिकल उदाहरणों के साथ C# (.NET) में टास्क क्यू के काम करने के तरीके को समझेंगे, बेसिक क्लासेज़ से लेकर मल्टीथ्रेडेड ऐप्स के लिए थ्रेड-सेफ़ समाधान तक।

\n\n

टास्क क्यू क्या है और इसकी ज़रूरत क्यों है?

\n\n

क्यू (Queue) एक डेटा स्ट्रक्चर है जो FIFO (First In, First Out) सिद्धांत पर काम करता है: पहले जोड़ा गया एलिमेंट पहले प्रोसेस होगा। टास्क के संदर्भ में, इसका मतलब है कि हम एक टास्क को क्यू में रख सकते हैं और बाद में, जब संसाधन खाली हों, तब उसे प्रोसेस कर सकते हैं।

\n\n

टास्क क्यू के मुख्य उपयोग के मामले:

\n
    \n
  • बैकग्राउंड प्रोसेसिंग (ईमेल भेजना, रिपोर्ट जनरेट करना)
  • \n
  • लोड बैलेंसिंग (वर्कर थ्रेड्स के बीच टास्क बांटना)
  • \n
  • रिक्वेस्ट बफ़रिंग (जब सिस्टम सभी रिक्वेस्ट को तुरंत प्रोसेस नहीं कर सकता)
  • \n
  • एसिंक्रोनस लॉगिंग (मुख्य ऐप को धीमा किए बिना लॉग रिकॉर्ड करना)
  • \n
\n\n

C# में बेसिक क्लास Queue<T>

\n\n

.NET में System.Collections.Generic नेमस्पेस के अंतर्गत बिल्ट-इन क्लास Queue<T> मौजूद है। आइए एक सरल उदाहरण देखें:

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class SimpleQueueExample\n{\n    public static void Main()\n    {\n        // स्ट्रिंग्स की क्यू बनाएं\n        Queue<string> taskQueue = new Queue<string>();\n\n        // टास्क जोड़ें\n        taskQueue.Enqueue("ग्राहक को ईमेल भेजें");\n        taskQueue.Enqueue("रिपोर्ट जनरेट करें");\n        taskQueue.Enqueue("कैश अपडेट करें");\n\n        Console.WriteLine($"क्यू में टास्क की संख्या: {taskQueue.Count}");\n\n        // टास्क को क्रम से प्रोसेस करें\n        while (taskQueue.Count > 0)\n        {\n            string task = taskQueue.Dequeue();\n            Console.WriteLine($"प्रोसेसिंग: {task}");\n        }\n\n        Console.WriteLine($"क्यू खाली है: {taskQueue.Count == 0}");\n    }\n}
\n\n

Queue<T> के मुख्य मेथड:

\n
    \n
  • Enqueue(T item) — क्यू के अंत में एलिमेंट जोड़ता है
  • \n
  • Dequeue() — क्यू की शुरुआत से एलिमेंट निकालता और हटाता है
  • \n
  • Peek() — पहला एलिमेंट बिना हटाए लौटाता है
  • \n
  • Count — क्यू में एलिमेंट की संख्या
  • \n
\n\n

महत्वपूर्ण: Queue<T> थ्रेड-सेफ़ नहीं है। अगर कई थ्रेड एक साथ क्यू में पढ़ें और लिखें, तो एरर आएंगी। मल्टीथ्रेडेड सीनारियो के लिए ConcurrentQueue<T> का उपयोग करें।

\n\n

थ्रेड-सेफ़ क्यू: ConcurrentQueue<T>

\n\n

वास्तविक ऐप्स में टास्क क्यू का उपयोग लगभग हमेशा मल्टीथ्रेडेड संदर्भ में होता है। इसके लिए .NET में System.Collections.Concurrent नेमस्पेस में ConcurrentQueue<T> मौजूद है।

\n\n
using System;\nusing System.Collections.Concurrent;\nusing System.Threading.Tasks;\n\npublic class ConcurrentQueueExample\n{\n    public static void Main()\n    {\n        ConcurrentQueue<string> taskQueue = new ConcurrentQueue<string>();\n\n        // टास्क 1: एलिमेंट जोड़ना (Producer)\n        Task producer = Task.Run(() =>\n        {\n            for (int i = 1; i <= 10; i++)\n            {\n                taskQueue.Enqueue($"टास्क #{i}");\n                Console.WriteLine($"टास्क #{i} जोड़ा गया");\n                

ब्लॉग

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