C# में एसिंक्रोनस प्रोग्रामिंग: .NET के लिए संपूर्ण गाइड

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

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

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

C# में एसिंक्रोनस प्रोग्रामिंग का परिचय



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



C# 5.0 में async और await कीवर्ड के आगमन के साथ, एसिंक्रोनस प्रोग्रामिंग जटिल नहीं रही और हर डेवलपर के लिए सुलभ हो गई। इस गाइड में, हम सभी प्रमुख अवधारणाओं को कवर करेंगे: Task और ValueTask की मूल बातें से लेकर त्रुटि प्रबंधन और ऑपरेशन रद्द करने तक।



async/await और Task की मूल बातें



Task और Task<TResult> क्या है



Task TPL (Task Parallel Library) में केंद्रीय प्रकार है, जो एक एसिंक्रोनस ऑपरेशन का प्रतिनिधित्व करता है। Task (बिना रिटर्न वैल्यू के) और Task<TResult> (रिटर्न वैल्यू के साथ) एसिंक्रोनस कोड के निर्माण खंड हैं।



// बिना रिटर्न वैल्यू वाला सरल एसिंक्रोनस मेथडpublic async Task DoSomethingAsync(){    await Task.Delay(1000);    Console.WriteLine("हो गया!");}

// रिटर्न वैल्यू वाला एसिंक्रोनस मेथडpublic async Task<int> CalculateSumAsync(int a, int b){ await Task.Delay(500); // लंबी अवधि के ऑपरेशन का अनुकरण return a + b;}


async और await कीवर्ड



async मॉडिफायर कंपाइलर को बताता है कि मेथड में एसिंक्रोनस कोड है। await ऑपरेटर प्रतीक्षित कार्य पूरा होने तक मेथड के निष्पादन को रोकता है, बिना थ्रेड को ब्लॉक किए।



public async Task ProcessDataAsync(){    Console.WriteLine("प्रसंस्करण शुरू...");        // एसिंक्रोनस प्रतीक्षा — थ्रेड ब्लॉक नहीं होता    string result = await FetchDataFromApiAsync();        Console.WriteLine($"परिणाम प्राप्त: {result}");}


async/await के उपयोग के नियम



  • async void का उपयोग न करें (ईवेंट हैंडलर को छोड़कर) — इससे अपवादों को ट्रैक करना असंभव हो जाता है।
  • ब्लॉकिंग कॉल से बचें (.Result, .Wait()) — ये डेडलॉक का कारण बन सकते हैं।
  • एसिंक्रोनस मेथड्स को नाम दें स्पष्टता के लिए "Async" प्रत्यय के साथ।


उन्नत तकनीकें: ValueTask, CancellationToken और समानांतरता



ValueTask बनाम Task



ValueTask उन मामलों के लिए एक ऑप्टिमाइज़ेशन है जहां एसिंक्रोनस ऑपरेशन अक्सर सिंक्रोनस रूप से पूरा होता है (जैसे, कैश्ड डेटा)। Task के विपरीत, जो एक रेफरेंस टाइप है, ValueTask एक स्ट्रक्चर है, जो गार्बेज कलेक्टर पर लोड को कम करता है।



public ValueTask<int> GetCachedOrFetchAsync(int id){    if (cache.ContainsKey(id))    {        // सिंक्रोनस समाप्ति — बिना मेमोरी आवंटन के        return new ValueTask<int>(cache[id]);    }    // एसिंक्रोनस समाप्ति    return new ValueTask<int>(FetchFromDatabaseAsync(id));}


CancellationToken के साथ ऑपरेशन रद्द करना



CancellationToken लंबी अवधि के एसिंक्रोनस ऑपरेशन को सही ढंग से बाधित करने की अनुमति देता है। हमेशा रद्दीकरण टोकन पास करें यदि मेथड इसे स्वीकार करता है।



public async Task<string> DownloadFileAsync(string url, CancellationToken ct){    using var client = new HttpClient();    var response = await client.GetAsync(url, ct); // ct API में पास किया गया    return await response.Content.ReadAsStringAsync();}

// उपयोगvar cts = new CancellationTokenSource();cts.CancelAfter(TimeSpan.FromSeconds(5)); // 5 सेकंड का टाइमआउट

try{ string data = await DownloadFileAsync("https://example.com", cts.Tok ```

ब्लॉग

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