मैंने जो कुछ भी पढ़ा है, वह दावा करता है कि थ्रेड पर एक निरस्तता थ्रेडएबॉर्ट अपवाद से समाप्त होने से पहले आखिरकार ब्लॉक निष्पादित करेगी। मैं इसकी पुष्टि करना चाहता था इसलिए मैं कुछ तीसरे पक्ष कोड को संभालने के तरीके पर योजना बना सकता हूं जो अनिश्चित काल तक लटका सकता है। हालांकि निम्न परीक्षण मुझे उलझन में है:क्या थ्रेडएबॉर्ट अपवाद अंततः छोड़ सकता है?
public void runTest(DateTime deadline)
{
testThread = new Thread(() =>
{
try
{
Console.WriteLine("test thread started at " + DateTime.Now.ToShortTimeString());
while (true) { }
}
finally
{
Console.WriteLine("test thread entered FINALLY at " + DateTime.Now.ToShortTimeString());
while (true) { }
}
});
testThread.Start();
while (testThread.IsAlive && deadline.Subtract(DateTime.Now).TotalSeconds > 0)
{
Console.WriteLine("main thread while loop " + DateTime.Now.ToShortTimeString());
Thread.Sleep(10000);
}
if (testThread.IsAlive)
testThread.Abort();
Console.WriteLine("main thread after abort call " + DateTime.Now.ToShortTimeString());
}
मैं क्या लगता है जब यह चल रहा है कि सांत्वना कभी नहीं अंत में ब्लॉक में प्रवेश का उल्लेख है। आवेदन .abort कॉल के बाद जारी है जैसे कि आखिरकार कोई ब्लॉक नहीं है। क्या मुझसे कुछ गलत हो रही है? कंसोल को अंतिम लिखने तक पहुंचने से पहले आखिरकार ब्लॉक को पास नहीं करना चाहिए या निष्पादन आदेश अभी भी इस तथ्य का एक कार्य है कि आखिरकार एक अलग धागे या कुछ में है?
मैं कोड भाग गया और मैं 'परीक्षण धागा 03:21 PM' पर अंत में प्रवेश किया मिलता है।/कुछ है कि रिहाई निर्माण में बाधित नहीं किया जा सकता है में JITed किए जाने की संभावना अनंत लूप के रूप में कोई डिबगर संलग्न विन्यास – Romoku
की कोशिश की नहीं है, लेकिन मैं कोड डिबग के बीच अलग तरह से व्यवहार और जारी करेंगे संदेह है। –
कॉलिंग 'थ्रेड.एबॉर्ट' सिर में ड्राइवर को शूटिंग करके कार को रोकने की तरह है। कार रुक जाएगी, लेकिन इस बीच कोई घटना नहीं हो सकती है। आपको वास्तव में * थ्रेड.एबॉर्ट 'को कॉल करने की आवश्यकता नहीं है। यदि आप करते हैं, तो आपको अपने एप्लिकेशन के डिज़ाइन पर फिर से जाना होगा। –