मैं Parallel.ForEach के पूरा होने तक कैसे प्रतीक्षा कर सकता हूं


122

मैं अपनी वर्तमान परियोजना में टीपीएल का उपयोग कर रहा हूं और कई धागे को स्पिन करने के लिए Parallel.Foreach का उपयोग कर रहा हूं। टास्क क्लास में कार्य पूरा होने तक प्रतीक्षा करने के लिए प्रतीक्षा () शामिल है। उस तरह, मैं समानांतर के लिए कैसे प्रतीक्षा कर सकता हूं। कोई भी पूरा होने के लिए इंतजार कर सकता है और फिर अगले बयानों को निष्पादित कर सकता है?

जवाबों:


193

आपको कुछ विशेष करने की ज़रूरत नहीं है, Parallel.Foreach()तब तक इंतजार करेंगे जब तक कि इसके सभी ब्रंच किए गए कार्य पूरे नहीं हो जाते। कॉलिंग थ्रेड से आप इसे एकल सिंक्रोनस स्टेटमेंट के रूप में मान सकते हैं और उदाहरण के लिए इसे एक कोशिश / कैच के अंदर लपेट सकते हैं।


10
"Parallel.Foreach () तब तक प्रतीक्षा करेगा जब तक कि उसके सभी शाखा कार्य पूरे न हो जाएं" यह किसी स्थिति में भ्रमित हो सकता है, जैसे (Async कार्य अंदर): Parallel.ForEach (groupedUnreadMessages, async unreadMorgololion => {/ * * * *});
बो हू

यहाँ stackoverflow में एक अन्य मुद्दे है: stackoverflow.com/questions/11564506/…
Bo HU

4
यह उत्तर 2011 से, async / प्रतीक्षा से पहले है। लेकिन जैसा कि मैंने कहा, ForEach के अंदर धागे पैदा करना एक अच्छा विचार नहीं है। न ही कोई एसिंक्स एक्शन है। आपके द्वारा पोस्ट किए गए लिंक अच्छी जानकारी और समाधान प्रदान करते हैं।
हेनक होल्टरमैन

1
"ForEach के अंदर थ्रेडिंग थ्रेडिंग एक अच्छा विचार नहीं है" क्या आप विस्तार कर सकते हैं? क्या यह "जब तक आप सुनिश्चित नहीं करते कि आप लौटने से पहले इंतजार कर रहे हैं"?
ज्ञानेन्द्र २ ''१

16

आपको Parallel.Foreach के साथ इसकी आवश्यकता नहीं है: यह केवल उतने ही थ्रेड को निष्पादित करता है, जितने में प्रोसेसर उपलब्ध हैं, लेकिन यह सिंक्रोनाइज़ करता है।

अधिक जानकारी यहां पाई जा सकती है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.