2015-08-27 15 views
7

क्या निम्न कार्य के बीच का अंतर है में बनाम Task.Result का इंतजार है:एक async विधि

async Task<T> method(){ 
    var r = await dynamodb.GetItemAsync(...) 
    return r.Item; 
} 

async Task<T> method(){ 
    var task = dynamodb.GetItemAsync(...) 
    return task.Result.Item; 
} 

बनाम किसी कारण केवल दूसरे कार्यों के लिए मेरे मामले में। पहला ऐसा कभी खत्म नहीं होता है।

+0

तो केवल कारण है कि मैं ने पाया है कि एक इंतजार लटका सकता है नीचे अतः जवाब से है। मैंने सोचा कि मैं भविष्य में मेरी मदद करने के लिए यहां एक टिप्पणी छोड़ दूंगा। https://stackoverflow.com/questions/13489065/best-practice-to-call-configureawait-for-all-server-side-code https://stackoverflow.com/questions/9895048/ async-call-with-await-in-httpclient-never-return/10369275 # 10369275 –

उत्तर

15

await असीमित रूप से आपके कार्य के परिणाम को अनचाहे कर देगा, जबकि केवल कार्य का उपयोग कार्य पूरा होने तक अवरुद्ध होगा।

See this explanantion from Jon Skeet.

+1

हालांकि इस मामले में काम नहीं कर रहा है, लेकिन परिणाम – luis

+3

काम करता है @luis: किसी अन्य जानकारी की कमी, मुझे केवल एक ही जवाब है कि यह वास्तव में 'प्रतीक्षा' मामले में काम नहीं कर रहा है। आप गलती से सोचते हैं कि ऐसा करता है क्योंकि विधि स्वयं ही लौटती है। लेकिन जिस काम का इंतजार है, वह किसी भी तरह से पूरा नहीं होता है। अगर आप _that_ का जवाब चाहते हैं (जो आपके द्वारा पूछे गए एक से अलग प्रश्न है), तो आपको एक नया प्रश्न पोस्ट करना होगा, जो स्पष्ट रूप से बताएगा और [एक अच्छा, _minimal_, _complete_ कोड उदाहरण] प्रदान करेगा (https: // stackoverflow .com/help/mcve) जो विश्वसनीय रूप से समस्या को पुन: उत्पन्न करता है। –

3

task.Result एसिंक्रोनस ऑपरेशन पूरा होने तक संपत्ति के पहुंचने वाले एक्सेसर को कॉलिंग थ्रेड को अवरुद्ध कर रहा है; यह Wait method पर कॉल करने के बराबर है। एक बार ऑपरेशन का नतीजा उपलब्ध हो जाने पर, यह संग्रहीत होता है और परिणामस्वरूप संपत्ति के बाद के कॉल पर तुरंत लौटा दिया जाता है। ध्यान दें कि, यदि कार्य के संचालन के दौरान कोई अपवाद हुआ, या यदि कार्य रद्द कर दिया गया है, तो परिणाम संपत्ति एक मूल्य वापस नहीं करती है। इसके बजाय, संपत्ति मूल्य तक पहुंचने का प्रयास एक समेकित अपवाद अपवाद फेंकता है। केवल अंतर यह है कि प्रतीक्षा ब्लॉक नहीं होगी। इसके बजाए, यह कार्य को पूरा करने के लिए अतुल्यकालिक रूप से प्रतीक्षा करेगा और फिर

+3

हालांकि इस मामले में काम नहीं कर रहा है, लेकिन परिणाम काम करता है – luis

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