आप प्रत्येक थ्रेड में एक ईवेंट (उदा। ManualResetEvent
) बना सकते हैं, और इसे सिंक्रनाइज़ सूची में रख सकते हैं (lock
निर्माण का उपयोग करके)। कार्य समाप्त होने पर ईवेंट को सेट करें या सूची से हटा दें।
जब आप शामिल होना चाहते हैं, तो आप सभी घटनाओं को संकेतित करने के लिए WaitHandle.WaitAll
(MSDN documentation) का उपयोग कर सकते हैं।
यह एक हैक है, लेकिन मैं इसे किसी भी चीज़ को कम करने के तरीके को नहीं देख सकता!
संपादित करें: इसके अतिरिक्त, आप यह सुनिश्चित कर सकते हैं कि कोई भी नई घटना पोस्ट न हो, फिर कुछ सेकंड प्रतीक्षा करें। यदि वे वास्तव में अल्पकालिक हैं, तो आपको कोई समस्या नहीं होगी। यहां तक कि सरल, लेकिन अधिक हैकी।
अंत में, यदि यह केवल थोड़ी सी मात्रा है, तो सेवा तब तक बाहर नहीं निकलेगी जब तक सभी धागे मर गए न हों (जब तक कि वे पृष्ठभूमि धागे न हों); इसलिए यदि यह थोड़ी सी समय है, तो सेवा नियंत्रण प्रबंधक को एक या दूसरी बात नहीं दिखेगी - आप उन्हें अपने अनुभव में समाप्त होने के लिए छोड़ सकते हैं।
स्रोत
2010-08-06 18:43:04
उन्हें अल्पकालिक होना चाहिए, लेकिन मेरे उपयोग के मामले में, मुझे "काम करना चाहिए" से अधिक आश्वासन चाहिए। मैं पूल में धागे की संख्या को ट्रैक करने के लिए एक इंटरलॉक थ्रेड काउंटर का उपयोग करने के बारे में सोच रहा हूं, और उस बराबर शून्य पर प्रतीक्षा कर रहा हूं। – recursive
दरअसल, मुझे काउंटर की तुलना में आपका पहला सुझाव बेहतर लगता है। – recursive