2014-05-17 5 views
17

According to an article in MSDN Magazine के लिए कॉन्फ़िगरएवाइट (झूठी) सेट करें, यह सबसे अच्छा अभ्यास है "जब आप कर सकते हैं ConfigureAwait(false) का उपयोग करें।" इसके अलावा यह कहता है, "यदि आप किसी विधि के भीतर किसी बिंदु पर ConfigureAwait का उपयोग कर सकते हैं, तो मैं अनुशंसा करता हूं कि आप उस बिंदु के बाद उस विधि में हर प्रतीक्षा के लिए इसका उपयोग करें।" Stephen Cleary, उस लेख के लेखक, states on his blog कि "आपके 'लाइब्रेरी में async विधियों, जहां भी संभव हो कॉन्फ़िगरएवाइट (झूठी) का उपयोग करें [जोर जोड़ा गया]।"संपूर्ण प्रोजेक्ट/डीएल

देखते हुए कि अधिकांश या एक पुस्तकालय परियोजना में मेरी await बयान है कि व्यापक रूप से इस्तेमाल किया जा रहा .ConfigureAwait(false) होना चाहिए मतलब है सब करने के लिए कुछ/एक सेटिंग को परिवर्तित करने के लिए यह इतना है कि यह संभव है मेरी परियोजना के भीतर का इंतजार के डिफ़ॉल्ट व्यवहार/डीएल एक कब्जे वाले संदर्भ पर जारी नहीं है? यही है, ताकि मैं सभी कॉल .ConfigureAwait(false) पर छोड़ सकूं और इसके बजाय .ConfigureAwait(true) केवल तभी जब मुझे संरक्षित होने के संदर्भ की आवश्यकता हो।

उत्तर

14

नहीं, इसके लिए कोई विकल्प नहीं है। माइक्रोसॉफ्ट टीम ने उस व्यवहार के लिए एक कंपाइलर सेटिंग या कुछ पर विचार किया था, लेकिन इसे अस्वीकार कर दिया।

मुख्य कारण यह है कि यह बताने में काफी मुश्किल है कि संकलक स्विच कैसे सेट किया जाता है यह जानने के बिना कोड कैसे व्यवहार करता है।

+5

यह निश्चित रूप से उपयोगी होगा अगर कोई ऐसी विशेषता हो जो हम कक्षा या किसी फ़ंक्शन पर लागू कर सकें जो कॉन्फ़िगरएवाइट के डिफ़ॉल्ट मान को निर्दिष्ट करता है। –

+0

किसी भी परीक्षण ढांचे में ConfigAwait (झूठी) का परीक्षण करने के लिए अच्छा हो सकता है। किसी को भी पता है कि अगर इस तरह की कार्यक्षमता किसी भी ढांचे में मौजूद है। –

+1

@AbdulSaboor: इन दिनों कोड विश्लेषक हैं जो आपको स्पष्ट करने के लिए हमेशा 'कॉन्फ़िगरएवाइट' (या तो 'सत्य' या 'झूठी') का उपयोग करने के लिए मजबूर कर सकते हैं। मैं व्यक्तिगत रूप से उनका उपयोग नहीं करता हूं, लेकिन मैं विशेष रूप से बड़ी टीमों पर उनके लाभ देख सकता हूं। –

11

अब एक तृतीय पक्ष लाइब्रेरी है जो इसका समर्थन करती है। ConfigureAwait.Fody Nuget पैकेज आपको कक्षा, असेंबली या विधि को चिह्नित करने के लिए ConfigureAwait विशेषता का उपयोग करने की अनुमति देता है जैसे कि सभी प्रतीक्षा .ConfigureAwait(false) होनी चाहिए।

using Fody; 

[ConfigureAwait(false)] 
public class MyAsyncLibrary 
{ 
    public async Task MyMethodAsync() 
    { 
     await Task.Delay(10); 
     await Task.Delay(20); 
    } 

    public async Task AnotherMethodAsync() 
    { 
     await Task.Delay(30); 
    } 
} 

मैं इस अपने आप प्रयास नहीं किया है, लेकिन क्या मैं कैसे Fody ऐड-इन्स काम करते हैं, यह निश्चित रूप से संभव है के बारे में पता नहीं दिया गया: project page इस उदाहरण उपयोग है।

+3

ConfigureAwait.Fody एक अच्छा विचार है, लेकिन वर्तमान कार्यान्वयन छोटी है और लगता है कि –

+0

सक्रिय रूप से समर्थित नहीं है और इसके कारण, यह nuget से असूचीबद्ध हो गया है। – AgentFire

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