से थ्रेड पर एबॉर्ट मेरा सहकर्मी किसी तृतीय-पक्ष .NET लाइब्रेरी का उपयोग कर रहा है जिसके लिए हमारे पास स्रोत कोड नहीं है। हम थ्रेडपूल का उपयोग कर रहे हैं ताकि इस पुस्तकालय में बहुत से धागे बुला सकें, और कभी-कभी धागे में से एक हमेशा के लिए लटका होगा जबकि बाकी के साथ चुपके से चिपकाएंगे।कॉलिंग थ्रेड। थ्रेडपूल
तो हम ऐसे धागे को मारने के लिए भयभीत Thread.Abort
का उपयोग करना चाहते हैं। मैंने अपने स्वयं के धागे कताई से पहले यह किया है, लेकिन मैंने कभी थ्रेडपूल का उपयोग नहीं किया है। हम इस तरह प्रत्येक कार्य की शुरुआत के समय को ट्रैक करते हैं:
static Dictionary<Thread, DateTime> started = new Dictionary<Thread, DateTime>();
static void DoSomeWork(object foo)
{
lock(started)
started[Thread.CurrentThread] = DateTime.Now;
SomeBuggyLibraryThatMightInfiniteLoopOrSomething.callSomeFunction(doo);
lock(started)
started.Remove(Thread.CurrentThread);
}
तो हम ताला और चल धागे से अधिक पुनरावृति और उन्हें मारने के लिए Thread.Abort
कॉल कर सकते हैं? और यदि हम करते हैं, तो क्या हमें उस थ्रेडपूल में एक नया धागा जोड़ने की आवश्यकता होगी जिसे हमने अभी मार दिया है, या थ्रेडपूल हमारे लिए हैडल करेगा?
संपादित करें: Thread.Abort
के साथ सभी संभावित समस्याओं के बारे में मुझे बहुत जानकारी है। मुझे पता है कि इसे आदर्श रूप से कभी भी उत्पादन कोड में उपयोग नहीं किया जाना चाहिए, और यह आवश्यक रूप से धागे को भी रोक नहीं सकता है, और यदि थ्रेड को लॉक प्राप्त करने के दौरान आप थ्रेड को रोकते हैं, तो आप अन्य धागे, आदि को लटका सकते हैं। लेकिन अभी हम एक तंग समय सीमा पर हैं और हमारे पास यह मानने का सभ्य कारण है कि इस विशेष मामले में, हम पूरी प्रक्रिया को खतरे में डाल दिए बिना Thread.Abort
पर कॉल कर सकते हैं, और हम थ्रेडपूल को खत्म करने के लिए इस प्रोग्राम को फिर से लिखना टालना चाहते हैं जब तक हम बिल्कुल नहीं करना है।
तो मैं जो जानना चाहता हूं वह यह है: यह देखते हुए कि हम थ्रेडपूल से संबंधित धागे पर Thread.Abort
पर कॉल करेंगे, क्या थ्रेडपूल धागे होने के कारण कोई विशेष समस्याएं हैं, और क्या हमें मैन्युअल रूप से स्पिन करना है नया धागा जिसे मार डाला गया है उसे बदलने के लिए या थ्रेडपूल हमारे लिए ऐसा करेगा?
"[एक ThreadPool धागे छोड़ रहा है] लेकिन खतरनाक है। समय सूचना प्राप्त होने पर रखकर और धागा निरस्त किया गया है, मूल कृति आइटम पहले से ही समाप्त किया जा सकता था ऐसी है कि पूल के धागा पहले से ही कार्य आइटम पर स्थानांतरित हो गया है। आप वांछित व्यक्ति की बजाय उस माध्यमिक कार्य वस्तु को निरस्त कर देंगे, स्वयं को चोट पहुंचाने की दुनिया तक खोलना होगा। "- स्टीफन टब, एमएसडीएन पत्रिका 06-03 – JBSnorro