2013-06-12 7 views
8

Thread.CurrentThread.Join() को कॉल करने का क्या प्रभाव है, और अगर इसे कॉल करने के लिए कब समझदारी होगी?Thread.CurrentThread.Join() कब समझता है?

+0

क्या आपने प्रलेखन पढ़ा है? –

+0

क्या आपने इसे किसी कोड में कहीं देखा था? इसे कॉल करने पर भी विचार करना बहुत भयानक है। –

+0

आपको वर्तमान थ्रेड पर नहीं, _another_ thread 't' पर' t.Join() 'को कॉल करना चाहिए। [प्रलेखन] देखें (http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx)। –

उत्तर

12

() Thread.CurrentThread.Join बुला के प्रभाव

आप वर्तमान धागे के निष्पादन, और प्रभावी ढंग से मृत यह ताला को अवरुद्ध कर देगा क्या है। यह मौजूदा थ्रेड को तब तक अवरुद्ध कर देगा जब तक कि वर्तमान थ्रेड समाप्त न हो जाए, जो कभी नहीं होगा।

, और अगर इसे कॉल करने के लिए समझदारी होगी?

यह वास्तव में ऐसा करने के लिए समझ में नहीं आता है। आपको इस विधि को इस तरीके से कभी नहीं बुलाया जाना चाहिए।


एक तरफ ध्यान दें पर, जब से तुम .NET 4 का उपयोग कर रहे हैं, मैं सामान्य रूप में Thread.Join का उपयोग कर से बचने की सलाह देते हैं। नए Task/Task<T> कक्षाओं का उपयोग कई तरीकों से बहुत अच्छा है, क्योंकि आप आसानी से निरंतरता संलग्न कर सकते हैं (या यदि आपको वास्तव में ब्लॉक करने की आवश्यकता है तो हमेशा Task.Wait() पर कॉल करें)। जो मैं एक तरह से संदेह, जब तक यह वर्तमान धागे पर शामिल होने के लिए अन्य धागे को रोकने के लिए कुछ हैक है - -

+0

आपकी ओर से ध्यान दें: क्या आप सी # 5 (.NET 4.5) को सी # 4 (.NET 4.0) के साथ भ्रमित कर रहे हैं? –

+3

@JeppeStigNielsen नहीं - 'कार्य 'और' कार्य '.NET 4.' await'/'async' सी # 5 हैं, लेकिन' कार्य 'ने उन्हें भविष्यवाणी की। –

+0

@ जेप्पेस्टिगनिल्सन देखें: http://msdn.microsoft.com/en-us/library/dd321424(v=vs.100)।एएसपीएक्स –

1

नहीं है, CurrentThread.Join() कोई मतलब नहीं
बनाता है यह अपने कार्यक्रम चलना बंद कर सकता है, धागा धागा उदाहरण के लिए एक के लिए एक इंतजार कर रही है।

10

वास्तव में

CurrentThread.Join() 

कि आप वास्तविक कोड में देखा कि यह था या यह था

CurrentThread.Join(someTimeout) 

बाद

Thread.Sleep(someTimeout) 
में शामिल होने की अनुमति देता है वर्तमान धागा पर सिवाय इसके कि

के बराबर है यदि आप एक जीयूआई/COM स्थिति में हैं तो जारी रखने के लिए संदेश पंपिंग।

1

यह वास्तव में देखने योग्य दुनिया में समझ में आता है। आइए कहें कि आपके पास मुख्य रूप से कतार श्रोता है और आप मुख्य धागे को हमेशा के लिए चलाना चाहते हैं। जबकि (सत्य) करने के बजाय और अपना कोड लूप में डालने के बजाय, अंतिम पंक्ति आप इसे लिख सकते हैं। इस तरह वर्तमान धागा आवेदन के भीतर उत्पन्न अन्य धागे के लिए भी मूल धागा होगा। ऐप के लिए प्रवेश बिंदु के रूप में इसके बारे में सोचें।

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