दो प्रश्नों और बहुत भ्रम के बाद - मुझे आश्चर्य है कि मुझे अंत में यह सही मिला।async/प्रतीक्षा - क्या यह समझ सही है?
async/await
केवल एक ही उद्देश्य में कार्य करता है - कोड के बाद निष्पादित करने के लिए अनुमति देने के लिए एक पहले से ही अतुल्यकालिक कार्य समाप्त हो गया है: यह मेरी समझ है। उदा।
async Task CallerMethod()
{
await AsyncMethod();
AnotherMethod();
}
की अनुमति देता है के बाद अतुल्यकालिक AsyncMethod
AsyncMethod
के बाद के बजाय तुरंत समाप्त हो गया है शुरू कर दिया है AnotherMethod
निष्पादित किया जाना है।
async/ कुछ भी अतुल्यकालिक बनाता है। यह एक अलग थ्रेड शुरू नहीं करता है (जब तक प्रतीक्षा की गई विधि वैसे भी नहीं होती है), आदि
क्या मेरी समझ (अंत में) सही है?
हाँ जो सही के बारे में लगता है - लेकिन कृपया ध्यान दें कि यदि आप 'AsyncMethod' थ्रेड नहीं बढ़ाते हैं तो भी आप किसी अन्य थ्रेड पर समाप्त हो सकते हैं - आपकी कॉलबैक किसी भी थ्रेडपूल-थ्रेड – Carsten
@ करस्टन धन्यवाद में उत्पन्न की जा सकती है। मान लीजिए कि 'कॉलबैक' से आपका मतलब है 'अन्य विधि();' - इसका एक बहुत ही महत्वपूर्ण प्रभाव होगा - कि मैं इससे यूआई अपडेट नहीं कर सका - क्या यह वाकई सच है? – ispiro
नहीं, आप इससे यूआई को सुरक्षित रूप से अपडेट कर सकते हैं। इसका कारण यह है कि प्रत्येक थ्रेड में 'सिंक्रनाइज़ेशन कॉन्टेक्स्ट' होता है जिसका उपयोग एसिंक द्वारा उत्पन्न कोड द्वारा किया जाता है/async विधि को समाप्त करने वाले कॉलबैक को प्रेषित करने के लिए प्रतीक्षा करता है। डब्ल्यूपीएफ (उदाहरण के लिए) के मामले में, वह वर्ग एक 'डिस्पैचर सिंक्रनाइज़ेशन कॉन्टेक्स्ट' है जो आवश्यक होने पर विधि को डिस्पैचर थ्रेड पर वापस लेना सुनिश्चित करता है। WinForms के लिए एक समान वर्ग है। –