2014-12-03 8 views
7

मैं ASP.NET में कुछ कोडिंग कर रहा था जब मैं इस भर में आया था:क्या एएसपी.NET ईवेंट हैंडलर में async/await का उपयोग करना सुरक्षित है?

protected async void someButtonClickHandler(...) 
{ 
    if(await blah) 
     doSomething(); 
    else 
     doSomethingElse(); 
} 

this सवाल पूछने के बाद मैं कैसे async/await काम करता है की एक बेहतर समझ मिल गया। लेकिन फिर मुझे यह मारा गया कि ऊपर दिखाए गए तरीके से async/await का उपयोग करना सुरक्षित है?
मेरा मतलब है await blah कॉल करने के बाद कॉलर निष्पादन जारी रखता है। जिसका अर्थ है कि यह await blah पूर्ण होने से पहले ग्राहक को प्रतिक्रिया प्रदान कर सकता है। क्या यह सही है? और यदि ऐसा होता है तो doSomething()/doSomethingElse() पर क्या होता है। क्या उन्हें कभी निष्पादित किया जाएगा? अगर उन्हें निष्पादित किया जाता है तो क्या उपयोगकर्ता उनके परिवर्तनों के प्रभाव देखता है?
मेरे मामले में ये विधियां उपयोगकर्ता को प्रदर्शित कुछ डेटा बदलती हैं, लेकिन मैं यह भी जानना चाहूंगा कि सामान्य मामले में क्या होगा।

+0

क्या यह वेब रूपों के लिए है? –

+0

@ जोनाथनएलेन हां। – atoMerz

उत्तर

13

हाँ यह सुरक्षित है, लेकिन वास्तव में अनुशंसित नहीं है। recommended way to do this is via RegisterAsyncTask। हालांकि, एएसपी.नेट (वेब ​​फॉर्म) async void ईवेंट हैंडलर को सही तरीके से संभाल लेंगे।

हैंडलर await एस जब प्रतिक्रिया ग्राहक को प्रदान नहीं की जाती है; await केवल ग्राहक को नहीं, एएसपी.NET रनटाइम पर उत्पन्न होता है। एएसपी.नेट रनटाइम जानता है कि इवेंट हैंडलर पूरा नहीं हुआ है, इसलिए यह प्रतिक्रिया भेजने के लिए नहीं जानता है। जब ईवेंट हैंडलर पूरा हो जाता है, तो एएसपी.नेट रनटाइम उस समय प्रतिक्रिया भेजकर प्रतिक्रिया देता है।

मेरे पास MSDN article on async ASP.NET है जो आपको उपयोगी मिल सकता है। यदि आप इस बारे में उत्सुक हैं कि ASP.NET रनटाइम को कैसे पता है कि async हैंडलर पूरा नहीं हुआ है, तो मैं इसे an earlier MSDN article में कवर करता हूं।

+1

आपका पहला लिंक वर्तमान में टूटा हुआ है – Fredou

+1

@Fredou: लिंक सही है; यह एएसपी.नेट साइट के साथ एक समस्या है। सामग्री दिखाए जाने तक बस ताज़ा करें। –

संबंधित मुद्दे