C# में Async और Await: कैसे और कब उपयोग करें (चरण-दर-चरण ट्यूटोरियल)

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

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

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

C# में Async और Await: एप्लिकेशन को "हैंग" होने से बचाना

\n\n

क्या आपने कभी C# में कोई प्रोग्राम चलाया, एक बटन दबाया, और इंटरफ़ेस कुछ सेकंड के लिए "फ्रीज" हो गया? या हो सकता है, आपका सर्वर एक "भारी" अनुरोध को प्रोसेस करते समय नए अनुरोधों का जवाब देना बंद कर दे? परिचित लगता है? यह सिंक्रोनस कोड की क्लासिक समस्या है, जहां निष्पादन का थ्रेड किसी ऑपरेशन (फ़ाइल पढ़ना, डेटाबेस क्वेरी, HTTP कॉल) के पूरा होने की प्रतीक्षा में ब्लॉक हो जाता है।

\n\n

इस समस्या का समाधान है एसिंक्रोनस प्रोग्रामिंग। और C# में इसके लिए मुख्य उपकरण हैं कीवर्ड async और await। यदि आपने कभी सोचा है: "async और await का उपयोग कैसे और कब करें?" - तो आप सही जगह पर आए हैं। इस ट्यूटोरियल में, हम मूल बातों से लेकर सर्वोत्तम अभ्यासों तक सब कुछ समझेंगे, ताकि आप तेज़, उत्तरदायी और स्केलेबल कोड लिख सकें।

\n\n

यह सामग्री Stack Overflow पर एक वास्तविक लोकप्रिय प्रश्न पर आधारित है, जिसे हजारों बार देखा गया है। हमने इसे शैक्षिक सामग्री के लिए अनुकूलित किया है, जिसमें कोड उदाहरण और स्पष्ट स्पष्टीकरण जोड़े गए हैं।

\n\n

async और await क्या हैं? सरल शब्दों में

\n\n

कल्पना करें कि आप एक शेफ हैं (आपका प्रोग्राम)। आपको रात का खाना बनाना है। एक व्यंजन सूप है, जिसे 30 मिनट तक उबलने की आवश्यकता है। सिंक्रोनस दुनिया में, आप चूल्हे के पास खड़े होकर सूप के पकने का इंतज़ार करते, कुछ नहीं करते। मूर्खतापूर्ण है, है ना?

\n\n

एसिंक्रोनसिटी तब होती है जब आप सूप को उबलने के लिए रखते हैं (async) और बिना इंतज़ार किए, सलाद काटना, टेबल सेट करना और अन्य काम करना शुरू करते हैं। जब सूप तैयार हो जाता है, तो आप उस पर वापस आते हैं (await)। आप समय बर्बाद नहीं करते - आप कुशल हैं।

\n\n
    \n
  • async - एक मेथड मॉडिफायर जो कंपाइलर को बताता है: "इस मेथड में एसिंक्रोनस ऑपरेशन हैं। जब मैं await देखूं तो थ्रेड को ब्लॉक मत करो"।
  • \n
  • await - एक ऑपरेटर जो किसी टास्क (Task) पर लागू होता है। यह कहता है: "इस मेथड के निष्पादन को तब तक रोकें जब तक टास्क पूरा न हो जाए, लेकिन थ्रेड को ब्लॉक न करें। जैसे ही टास्क पूरा हो, इसी स्थान से निष्पादन जारी रखें"।
  • \n
\n\n

महत्वपूर्ण: await थ्रेड को ब्लॉक नहीं करता। यह नियंत्रण कॉल करने वाले कोड को वापस कर देता है, और थ्रेड अन्य काम करना जारी रखता है।

\n\n

async और await का उपयोग कब करें?

\n\n

यह सबसे आम प्रश्न है। उत्तर सरल है: हमेशा जब आप कोई ऐसा ऑपरेशन कर रहे हों जिसमें अधिक समय लग सकता है (I/O-bound ऑपरेशन), और आप थ्रेड को ब्लॉक नहीं करना चाहते।

\n\n

ये हैं विशिष्ट परिदृश्य:

\n
    \n
  • नेटवर्क अनुरोध: HTTP कॉल (HttpClient), WebSocket के साथ काम करना।
  • \n
  • फ़ाइलों के साथ काम करना: बड़ी फ़ाइलों को पढ़ना/लिखना, स्ट्रीम के साथ काम करना।
  • \n
  • डेटाबेस अनुरोध: Entity Framework, ADO.NET, Dapper।
  • \n
  • वेब सेवाओं के साथ काम करना: WCF, REST API।
  • \n
  • कोई भी इनपुट-आउटपुट (I/O) ऑपरेशन: डिस्क, नेटवर्क, प्रिंटर तक पहुंच।
  • \n
\n\n

async और await का उपयोग कब नहीं करना चाहिए?

\n
    \n
  • CPU-bound ऑपरेशन: यदि आपके कार्य में गहन गणना की आवश्यकता है (3D रेंडरिंग, वीडियो प्रोसेसिंग, जटिल गणितीय गणना), तो async/await मदद नहीं करेगा। यहां आपको CPU के कई कोर पर समानांतरीकरण के लिए Task.Run या Parallel का उपयोग करना चाहिए।
  • \n
  • क्लास कंस्ट्रक्टर में: कंस्ट्रक्टर async नहीं हो सकते। फ़ैक्टरी मेथड का उपयोग करें (public static async Task<MyClass> CreateAsync())।
  • \n
  • प्रॉपर्टी के गेटर/सेटर में: वे भी async नहीं हो सकते। मेथड का उपयोग करें।
  • \n
\n\n

यह कैसे काम करता है? कोड उदाहरण के साथ विश्लेषण

\n\n

आइए वास्तविक कोड देखें। कल्पना करें कि हम एक दूरस्थ सर्वर से डेटा लोड कर रहे हैं।

\n\n

खराब उदाहरण (सिंक्रोनस)

\n
public string GetDataFromWeb()\n{\n    usi                

ब्लॉग

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