मेरे एएसपी.नेट 5 ऐप में, मैं अपने स्टार्टअप के अंदर एक कैश में कुछ डेटा लोड करना चाहता हूं। कॉन्फ़िगर विधि। Azure एसडीके विशेष रूप से async विधियों का खुलासा करता है। आमतौर पर, एक async विधि बुला एक async विधि के अंदर इंतजार के माध्यम से किया जाता है, इस तरह:मैं स्टार्टअप में कॉन्फ़िगर कैसे कर सकता हूं। कॉन्फ़िगर करें?
public async Task Configure(IApplicationBuilder app, IMemoryCache cache)
{
Data dataToCache = await DataSource.LoadDataAsync();
cache.Set("somekey", dataToCache);
// remainder of Configure method omitted for clarity
}
हालांकि, ASP.NET 5 की आवश्यकता है कि कॉन्फ़िगर विधि शून्य देता है। मैं एक एसिंक शून्य विधि का उपयोग कर सकता हूं, लेकिन मेरी समझ यह है कि एसिंक शून्य विधियों का उपयोग केवल ईवेंट हैंडलर के लिए किया जाना चाहिए (https://msdn.microsoft.com/en-us/magazine/jj991977.aspx के अनुसार कई अन्य लोगों के बीच)।
मैं सोच रहा था कि यह करने के लिए एक बेहतर तरीका है इस तरह Task.Results संपत्ति के माध्यम से इंतजार बिना async समारोह कॉल करने के लिए, लौटे टास्क पर रुको कहते हैं, तो कैश परिणाम, होगा:
public void Configure(IApplicationBuilder app, IMemoryCache cache)
{
Task<Data> loadDataTask = DataSource.LoadDataAsync();
loadDataTask.Wait();
cache.Set("somekey", loadDataTask.Result);
// remainder of Configure method omitted for clarity
}
स्टीफन वाल्थर ने इस वर्ष की शुरुआत में blog post में एक समान दृष्टिकोण का उपयोग किया था। हालांकि, यह उस पोस्ट से अस्पष्ट है अगर इसे स्वीकार्य अभ्यास माना जाता है। क्या यह?
यदि इसे स्वीकार्य अभ्यास माना जाता है, तो क्या - यदि कोई है - मुझे त्रुटि प्रबंधन की आवश्यकता है? मेरी समझ यह है कि कार्य। प्रतीक्षा() एसिंक ऑपरेशन द्वारा फेंकने वाले किसी भी अपवाद को फिर से फेंक देगा और मैंने एसिंक ऑपरेशन को रद्द करने के लिए कोई तंत्र प्रदान नहीं किया है। बस बस काम कर रहा है। प्रतीक्षा करें() पर्याप्त है?
यह एक दिलचस्प सवाल है। मुझे नहीं पता लेकिन मुझे लगता है * इस मामले में * async शून्य का कोई दुष्प्रभाव नहीं है। उम्मीद है कि अधिक अनुभव वाला कोई जवाब दे सकता है। –
'async void' * * के इस मामले में साइड इफेक्ट्स हैं, क्योंकि यह विधि को कॉल करने वाले व्यक्ति को सिग्नल करता है कि विधि चल रहा है, जबकि वे अन्य काम के साथ आगे बढ़ सकते हैं। चूंकि एप्लिकेशन सेटअप के साथ 'कॉन्फ़िगर करें' सौदों के बाद, आवेदन कोड के अन्य हिस्सों को समाप्त होने से पहले इसे जारी रखने के लिए अप्रत्याशित परिणाम हो सकते हैं। (हम इस मुद्दे में भाग गए, और यह हमारे आवेदन को निर्भर करता है क्योंकि निर्भरता इंजेक्टर इंजेक्शन वाली सेवाओं को अभी तक ठीक से स्थापित नहीं किया गया था)। –