C # में, जब आप किसी विधि को ओवरराइड करते हैं, तो मूल विधि नहीं होने पर ओवरराइड को एसिंक्रोन बनाने की अनुमति होती है। यह खराब फॉर्म की तरह लगता है।
उदाहरण जो मुझे इस पर लाया गया था, वह था - मुझे लोड टेस्ट की समस्या से सहायता के लिए लाया गया था। लगभग 500 समवर्ती उपयोगकर्ताओं पर, लॉगिन प्रक्रिया एक अनुप्रेषित लूप में टूट जाएगी। IIS संदेश के साथ अपवादों को लॉग कर रहा था "एक अतुल्यकालिक मॉड्यूल या हैंडलर पूरा हुआ जबकि एक अतुल्यकालिक ऑपरेशन अभी भी लंबित था"। कुछ खोज ने मुझे यह सोचने के लिए प्रेरित किया कि कोई व्यक्ति दुर्व्यवहार कर रहा था async void
, लेकिन स्रोत के माध्यम से मेरी त्वरित खोजें कुछ भी नहीं पा सकीं।
अफसोस की बात है कि मैं 'async \ svoid' (regex खोज) की खोज कर रहा था, जब मुझे 'async \ s [^ T] जैसी कुछ और चीज़ों की तलाश में होना चाहिए था (यह मानकर कार्य पूरी तरह से योग्य नहीं था ... आपको बात मिल जाएगी)।
मुझे बाद में जो मिला वह async override void onActionExecuting(...
आधार नियंत्रक में था। स्पष्ट रूप से यह समस्या थी, और यह थी। इसे ठीक करना (पल के लिए इसे समकालिक बनाना) ने समस्या को हल कर दिया।
इस सवाल पर वापस जाएं: क्यों ओह जब आप कॉल कोड का कभी इंतजार नहीं कर सकते, तो आप एक ओवरराइड को async के रूप में चिह्नित क्यों कर सकते हैं?
Task
।