मैं अपने प्रोजेक्ट में से एक के लिए सबसे अच्छा अभ्यास खोजने की कोशिश कर रहा हूँ। यह एक यूआई के साथ एक ठेठ डब्ल्यूपीएफ एप्लीकेशन है जो वस्तुओं की एक सूची प्रदर्शित करता है और एक डेटा सेवा है जो परिणाम देता है।Async बनाम GetAwaiter() का इंतजार है। GetResult() और कॉलबैक
हम इतनी के रूप में यूआई ब्लॉक नहीं करने के लिए सेवा बुला रहे हैं अतुल्यकालिक रूप से। हम 2 हमारे सामने विकल्प हैं:
Async का उपयोग का इंतजार कीवर्ड यह बटन से सभी तरीकों Async अंकन की आवश्यकता है सेवा के लिए परत सभी तरह क्लिक करें (क्लाइंट की तरफ वर्ग सर्वर से http कॉल करता है कि) और बीच में कोई भी विधि। यह दृष्टिकोण ठीक अन्य काम करता है तो हर जगह async प्रचार के मुद्दे
awaiter और कॉलबैक इस दृष्टिकोण यूआई ग्राहक सेवा परत कॉल करता है और सेवा परत को एक कॉलबैक गुजरता में प्रयोग करें, सेवा परत http कॉल करने के लिए लपेटता एक कार्य में सर्वर और GetAwaiter()। GetResult() का उपयोग करें, जब http कॉल समाप्त हो जाता है तो यह UI क्लाइंट द्वारा पारित कॉलबैक को आमंत्रित करता है। इस मामले में कोई विधि एसिंक को चिह्नित नहीं करनी है, लेकिन GetAwaiter()
टास्क.रुन (async() => // http कॉल का इंतजार, कॉलबैक का आह्वान) के बारे में वास्तव में निश्चित नहीं है। GetAwaiter()। GetResult ();
मैं सिर्फ पता लगाने के लिए जो एक बेहतर तरीका है और कोशिश कर रहा हूँ अगर वहाँ है कि मैं
मुझे पूरा यकीन है कि दूसरा दृष्टिकोण थोड़ी देर में मृत ताले का कारण बन सकता है। मुझे पता है क्योंकि विंडोज यूनिवर्सल के साथ विकास करते समय मुझे कुछ समान सामना करना पड़ा है। – Felype
अपवादों का सवाल भी है। मैं एक पूर्ण async कार्यान्वयन के साथ पता है, तुम अंत में 'AggregateException' मिलता है, लेकिन मुझे नहीं पता कि क्या' GetAwaiter' विधि – Eris
@Eris में अपवाद के लिए होता जब आप का इंतजार है आप एक 'AggregateException' नहीं मिलता है। आपको आंतरिक अपवाद मिलता है। 'GetResult' के साथ भी ऐसा ही होता है। – i3arnon