2012-10-24 15 views
17

यह मेरा दृष्टिकोण अतुल्यकालिक संचालन के भीतर स्थिर तरीकों और वर्गों का उपयोग करने के नहीं है - जब तक कुछ ताला तकनीक दौड़ की स्थिति को रोकने के लिए लागू किया गया है। जो बहु अनुप्रयोगों को सरल और उत्तरदायी यूआई प्रोत्साहित करती है -मैं एसिंक/प्रतीक्षा ऑपरेशन के भीतर स्थिर विधि/कक्षाओं का उपयोग कैसे करना चाहिए?

अब async/इंतजार में ग # 4.5+ ढांचा शुरू किया गया है।

हालांकि - के रूप में एक ताला नहीं/एक का इंतजार कर विधि पर रखा जा नहीं किया जाना चाहिए (और मैं बहस है कि नहीं कर रहा हूँ) है कि अब async उपयोग स्थिर तरीकों पड़ता है/पूरी तरह से बेमानी का इंतजार है?

+0

से अधिक थ्रेड से एक स्थिर विधि कॉलिंग करता है, तो यह किसी भी दुष्प्रभाव नहीं है ठीक हो जाएगा। –

+0

एक विधि दुष्प्रभाव है तो फिर वह नहीं पहली जगह में स्थिर होना चाहिए, क्योंकि यह दिशानिर्देश है कि वैश्विक परिवर्तनशील राज्य से बचा जाना चाहिए उल्लंघन करती है। – CodesInChaos

+0

@CodesInChaos मुझे नहीं लगता कि आप * उल्लंघन कर सकता है * दिशा निर्देशों ;-) किसी भी तरह से, बिंदु मैं बनाने की कोशिश कर रहा था कि लॉकिंग, सबसे स्थिर तरीकों के लिए आवश्यक नहीं किया जाएगा जब तक साझा राज्य के कुछ प्रकार उत्परिवर्तित जा रहा है। ओपी ने उस मोर्चे पर पर्याप्त जानकारी प्रदान नहीं की है, और ऐसा लगता है कि यह लॉकिंग है क्योंकि यह स्थिर है, राज्य प्रबंधन के लिए लॉक नहीं है। –

उत्तर

31

यह मेरा दृष्टिकोण अतुल्यकालिक संचालन के भीतर स्थिर तरीकों और वर्गों का उपयोग करने के नहीं है - जब तक कुछ ताला तकनीक दौड़ की स्थिति को रोकने के लिए लागू किया गया है।

क्यों? जब तक आप वास्तव में साझा राज्य का उपयोग नहीं कर रहे हैं, तब तक कोई दौड़ की स्थिति नहीं होनी चाहिए। उदाहरण के लिए, पर विचार करें:

public static async Task<int> GetPageLength(string url) 
{ 
    string text = await new WebClient().DownloadStringTaskAsync(url); 
    return text.Length; 
} 

आप कर तो राज्य को साझा किया है - या यदि आप एक उदाहरण जो एक से अधिक थ्रेड द्वारा प्रयोग किया जाता है एक उदाहरण पर विधि हैं - अपनी बाहर काम कैसे क्या तुम करोगी करने की जरूरत है आदर्श काम करने के लिए आपके एसिंक्रोनस ऑपरेशन चाहते हैं। एक बार जब आप तय कर लें कि विभिन्न दौड़ों का व्यवहार कैसे किया जाना चाहिए, वास्तव में इसे लागू करना काफी सरल हो सकता है।

+0

क्षमा याचना - मैं वास्तव में साझा राज्य के साथ स्थिर तरीकों मतलब है - मेरे सवाल का अद्यतन एक उदाहरण –

+2

@PatrickMcCurley प्रदान करने के लिए होगा: उस मामले में यह इतना "staticness" है कि समस्या नहीं है - यह "कई एक ही उपयोग करना चाहते सूत्र है साझा राज्य "। उदाहरण के सदस्यों में यह आसानी से हो सकता है, जब राज्यों में उदाहरण साझा किए जाते हैं। –

+1

असल में आपके मूल उत्तर के बारे में सोचा है, मुझे इस बात पर संदेह करना शुरू हो रहा है कि एक स्थिर विधि कहलाते समय क्या होता है। यदि एक स्थिर चर में एक स्थानीय चर घोषित किया गया है, और 2 धागे एक ही समय में स्थिर विधि दर्ज करते हैं - क्या यह स्थानीय रूप से घोषित वस्तु के लिए दौड़ की स्थिति का कारण नहीं बन सकता है? –

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

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