2013-08-13 12 views
6

सी # 5.0 के बारे में अच्छी चीजों में से एक async/await कीवर्ड है और यह कार्य समानांतर लाइब्रेरी (टीपीएल) के साथ लिखने के लिए उपयोग की जाने वाली नलसाजी को सरल बनाता है।क्या पहले उपलब्ध थ्रेड पर जारी रखने के लिए async/प्रतीक्षा करने का कोई तरीका है?

मेरा प्रश्न यह है कि यदि आपके पास थ्रेड-अज्ञेय कोड है और आप मुख्य थ्रेड (पढ़ा: यूआई थ्रेड) पर एसिंक ऑपरेशन ट्रिगर करते हैं, लेकिन आपको जरूरी नहीं है कि निरंतरता मुख्य धागे पर होती है, तो क्या कर सकते हैं आप async/await प्रतिमान बताते हैं कि आप इसे पहले उपलब्ध धागे पर जारी रखना चाहते हैं, भले ही यह मुख्य धागा न हो?

मुझे लगता है कि ऐसा करने में सक्षम होने से कुछ परिदृश्यों की दक्षता में वृद्धि होगी, लेकिन चांदी की गोली नहीं होगी।

+2

ध्यान दें कि कुछ मामलों में उचित कार्य के लिए यह क्षमता बहुत महत्वपूर्ण है, न केवल दक्षता। आप यह सुनिश्चित करके डेडलॉक्स पैदा करने से बच सकते हैं कि कब्जे वाले संदर्भ में कुछ निरंतरताएं नहीं चल रही हैं। – Servy

उत्तर

15

आप परवाह नहीं है कि कहां विधि के बाकी जारी है, Task.ConfigureAwait का उपयोग करें:

await foo.DoSomethingAsync().ConfigureAwait(continueOnCapturedContext: false); 

(आप यहाँ एक नामित तर्क का उपयोग करने के नहीं है, लेकिन यह स्पष्टता बढ़ जाती है।)

अधिक जानकारी के लिए Stephen Cleary's "best practices" article का "कॉन्फ़िगर कॉन्फ़िगर करें" भाग देखें।

+0

ओच, लेकिन एक अच्छे तरीके से। :) मेरा मतलब है: मैंने उस लेख को लिखा है, लेकिन यह चापलूसी है कि आप इसे उच्च गुणवत्ता मानते हैं। –

+0

@StephenCleary: ओह, क्षमा करें। मैं "स्टीफन टुब सर्वोत्तम प्रथाओं कॉन्फ़िगरएवाइट" की खोज कर रहा था और पाया कि - फिर लेखक की जांच नहीं की गई। गहरी क्षमा! (मुझे यकीन है कि मैंने इस पर एक और लेख * वास्तव में * देखा है ...) –

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

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