मैं सामान्य सी # विकास की एक पुस्तक के माध्यम से जा रहा हूं, और मैं धागा निरस्त खंड में आया हूं।ThreadAbortException को पकड़ते समय छिपे हुए थ्रो के साथ क्या सौदा है?
पुस्तक कुछ पंक्तियों के साथ कुछ कहती है कि जब आप थ्रेड.एबॉर्ट() को किसी अन्य थ्रेड पर कॉल करते हैं, तो वह धागा थ्रेडएबॉर्ट अपवाद को फेंक देगा, और यदि आप इसे दबाए रखने की कोशिश भी करते हैं, तो यह स्वचालित रूप से इसे फिर से चलाएगा, जब तक कि आप कुछ बीएस नहीं करते यह आम तौर पर फहरा हुआ है। यहां दिया गया सरल उदाहरण दिया गया है।
using System;
using System.Threading;
public class EntryPoint
{
private static void ThreadFunc()
{
ulong counter = 0;
while (true)
{
try
{
Console.WriteLine("{0}", counter++);
}
catch (ThreadAbortException)
{
// Attempt to swallow the exception and continue.
Console.WriteLine("Abort!");
}
}
}
static void Main()
{
try
{
Thread newThread = new Thread(new ThreadStart(EntryPoint.ThreadFunc));
newThread.Start();
Thread.Sleep(2000);
// Abort the thread.
newThread.Abort();
// Wait for thread to finish.
newThread.Join();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
पुस्तक का कहना है:
अपने धागा बीच में बंद करें अपवाद संसाधित होना समाप्त करते हैं, क्रम परोक्ष अपने अपवाद संचालक के अंत में यह rethrows। यह वैसे ही है जैसे आपने खुद को अपवाद को पुनर्स्थापित कर दिया था। इसलिए, किसी भी बाहरी अपवाद हैंडलर या अंततः ब्लॉक सामान्य रूप से निष्पादित करेंगे। उदाहरण में, शामिल होने के लिए कॉल प्रारंभिक रूप से अपेक्षित के रूप में हमेशा के लिए इंतजार नहीं करेगा।
तो मैंने थ्रेड के आसपास एक कोशिश पकड़ लिया। एबॉर्ट() कॉल करें और ब्रेक प्वाइंट सेट करें, यह कहने के लिए कि यह कहने के लिए "कोई बाहरी अपवाद हैंडलर या अंत में ब्लॉक सामान्य रूप से निष्पादित होंगे"। लेकिन यह नहीं करता है। मैं अपने दिमाग को क्यों समझ रहा हूं कि क्यों।
किसी के पास कोई विचार नहीं है कि ऐसा क्यों नहीं है? क्या किताब गलत है?
अग्रिम धन्यवाद।
आपका प्रोग्राम आउटपुट क्या करता है? –
मुझे आशा है कि पुस्तक में यह भी उल्लेख किया गया है कि थ्रेड। एबॉर्ट बुरा है और इसका कभी भी उपयोग नहीं किया जाना चाहिए। –
जितना संभव हो उतना # लिखने के लगभग 20 सेकंड, फिर निरस्त करें !, फिर यह लौटता है। – priehl