2010-09-05 5 views
6

एमएसडीएन, साथ ही साथ कई अन्य स्रोतों का दावा है कि थ्रेड पूल में कार्यकर्ता धागे हमेशा पृष्ठभूमि होते हैं।थ्रेड पूल और आईएस बैकग्राउंड .NET

"थ्रेड पूल धागे पृष्ठभूमि धागे हैं।" (एमएसडीएन)

"पूल किए गए धागे हमेशा पृष्ठभूमि धागे होते हैं।" (सी # में थ्रेडिंग, जोसेफ अल्बहारी)

मैं आसानी से

Thread.CurrentThread.IsBackground = false; 

स्थापित करने और आवेदन धागा खत्म होने तक इंतजार कर रहे होंगे द्वारा कार्यकर्ता धागा गैर पृष्ठभूमि बना सकते हैं।

इसके साथ क्या गलत है?

उत्तर

5

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

+0

धन्यवाद। मैं पूल किए गए धागे को गैर-पृष्ठभूमि बनाने के कारण होने वाली समस्याओं को समझता हूं। मेरा मुद्दा यह है कि क्यों फ्रेमवर्क इसे और अधिक स्पष्ट तरीके से करने की अनुमति नहीं देता है? मुझे ईमानदार होने का अपवाद होने की उम्मीद थी। आपका धन्यावाद। –

10

हां, आप उन्हें बदल सकते हैं। लेकिन आप नहीं होना चाहिए।

इसी कारण से आप उधारित कार को पेंट नहीं करते हैं। प्राथमिकता और एमटीए जैसे अन्य थ्रेड गुणों के लिए वही।

यदि आप एक अलग प्रकार के धागे चाहते हैं, तो अपना खुद का बनाएँ।

3

थ्रेड पूल धागे पृष्ठभूमि धागे हैं

साथ उस वाक्य को समाप्त करें "वे अपने IsBackground संपत्ति, यह सच है के लिए शुरू थ्रेड वर्ग के साथ बनाया धागे के विपरीत है।"

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