C# में एसिंक्रोनस प्रोग्रामिंग: उदाहरणों के साथ पूर्ण गाइड

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

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

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

C# में एसिंक्रोनस प्रोग्रामिंग: व्यावहारिक पूर्ण गाइड

\n\n

एसिंक्रोनस प्रोग्रामिंग C# और .NET प्लेटफॉर्म पर आधुनिक डेवलपमेंट की प्रमुख अवधारणाओं में से एक है। यह ऐसे रिस्पॉन्सिव एप्लिकेशन बनाने में सक्षम बनाता है जो लंबी प्रक्रियाओं (फ़ाइल पढ़ना, डेटाबेस क्वेरी, HTTP कॉल) की प्रतीक्षा करते समय एक्ज़ीक्यूशन थ्रेड को ब्लॉक नहीं करते। इस गाइड में, हम व्यावहारिक उदाहरणों के साथ async और await कीवर्ड का उपयोग करके C# में एसिंक्रोनसिटी के काम करने के तरीके को समझेंगे, साथ ही सर्वोत्तम प्रथाओं पर भी चर्चा करेंगे।

\n\n

एसिंक्रोनस प्रोग्रामिंग क्या है और इसकी आवश्यकता क्यों है?

\n\n

सिंक्रोनस प्रोग्रामिंग में, प्रत्येक ऑपरेशन क्रमिक रूप से निष्पादित होता है। यदि कोई मेथड, उदाहरण के लिए, नेटवर्क से डेटा डाउनलोड करता है, तो एक्ज़ीक्यूशन थ्रेड उस ऑपरेशन के पूरा होने तक ब्लॉक हो जाता है। इससे डेस्कटॉप एप्लिकेशन में इंटरफ़ेस "फ्रीज़" हो जाता है या वेब एप्लिकेशन में सर्वर संसाधनों का अकुशल उपयोग होता है।

\n\n

एसिंक्रोनस प्रोग्रामिंग इस समस्या को हल करती है: थ्रेड ब्लॉक नहीं होता, बल्कि अन्य कार्यों को संसाधित करने के लिए थ्रेड पूल में वापस आ जाता है। जब ऑपरेशन पूरा हो जाता है, तो निष्पादन उसी स्थान से फिर से शुरू होता है जहाँ इसे रोका गया था।

\n\n

C# में एसिंक्रोनसिटी के मुख्य लाभ:

\n
    \n
  • UI की प्रतिक्रियाशीलता — लंबी प्रक्रियाओं के दौरान एप्लिकेशन फ्रीज़ नहीं होता।
  • \n
  • सर्वर की स्केलेबिलिटी — एक थ्रेड कई अनुरोधों को संभाल सकता है।
  • \n
  • संसाधनों का कुशल उपयोग — थ्रेड्स का कम डाउनटाइम।
  • \n
\n\n

C# में async और await की मूल बातें

\n\n

कीवर्ड async और await सिंटैक्टिक शुगर हैं जो एसिंक्रोनस ऑपरेशन के साथ काम को सरल बनाते हैं। आइए एक बुनियादी उदाहरण देखें:

\n\n
using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\npublic class AsyncExample\n{\n    public async Task<string> DownloadDataAsync(string url)\n    {\n        using (var client = new HttpClient())\n        {\n            // await थ्रेड को ब्लॉक नहीं करता\n            string result = await client.GetStringAsync(url);\n            return result;\n        }\n    }\n\n    public async Task RunAsync()\n    {\n        Console.WriteLine("डाउनलोड शुरू कर रहे हैं...");\n        string data = await DownloadDataAsync("https://api.example.com/data");\n        Console.WriteLine($"डाउनलोड किया गया: {data.Length} अक्षर");\n    }\n}
\n\n

कोड की व्याख्या:

\n
    \n
  • मेथड को async से चिह्नित किया गया है — यह अंदर await के उपयोग की अनुमति देता है।
  • \n
  • रिटर्न टाइप Task<string> है (या void मेथड के लिए केवल Task)।
  • \n
  • await परिणाम प्राप्त होने तक मेथड के निष्पादन को रोकता है, लेकिन थ्रेड को ब्लॉक नहीं करता।
  • \n
\n\n

महत्वपूर्ण: C# 7.1+ में कंसोल एप्लिकेशन का Main मेथड भी एसिंक्रोनस हो सकता है:

\n
static async Task Main(string[] args)\n{\n    var example = new AsyncExample();\n    await example.RunAsync();\n}
\n\n

Task और Task<T> के साथ काम करना

\n\n

टाइप Task एक एसिंक्रोनस ऑपरेशन का प्रतिनिधित्व करता है। यह विभिन्न अवस्थाओं में हो सकता है: प्रतीक्षा (Pending), निष्पादन (Running), पूर्ण (Completed), त्रुटि (Faulted) या रद्द (Canceled)।

\n\n

आइए मैन्युअल रूप से टास्क बनाना और चलाना देखें:

\n\n
public async Task ProcessDataAsync()\n{\n    // एक टास्क बनाएँ जो थ्रेड पूल में निष्पादित होता है\n    Task<int> task = Task.Run(() =>\n    {\n        // लंबे काम का अनुकरण\n        Task.Delay(2000).Wait();\n        return 42;\n    });\n\n    // परिणाम की प्रतीक्षा करें\n    int result = await task;\n    Console.WriteLine($"परिणाम: {result}");\n}
\n\n

एक साथ कई टास्क चलाने के लिए Task.WhenAll का उपयोग करें:

\n\n
public async Task DownloadMultipleAsync()\n{\n    var urls = new[] { "https://site1.com", "https://site2.com", "https://site3.com" };\n    var tasks =                

ब्लॉग

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