[英]Exception Thrown in thread pool
我有一個線程池,並且我使用了一個庫,如果滿足某些條件,該庫將引發異常。 我的問題是,如果這用盡了IDE,線程會停止還是整個程序都停止?
如果應用程序是.Net 2+,則非主線程上的未處理異常將使進程變平。
您可以使用app.config LegacyUnhandledExceptionPolicy
設置配置此行為,但我不建議您這樣做,因為它可能掩蓋嚴重的錯誤。
更新
如果您希望忽略偶爾的超時異常,請考慮將WebService調用放在try \\ catch塊中,並忽略超時異常:
try
{
//Call WebService
}
catch(System.Net.WebException ex)
{
//Ignore
}
因此,讓我們回顧一下您擁有的東西:
TheadPool
線程上執行的方法。 try-catch
塊不會處理該異常。 現在,我們可以使用以下代碼輕松進行測試。 請仔細注意以下觀察,特別是大膽的觀察,因為它們在您的問題中很有趣。
public static void Main()
{
ThreadPool.QueueUserWorkItem(
(state) =>
{
throw new InvalidOperationException();
}, null);
while (true)
{
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now.ToString());
}
}
在IDE外部運行時,您將看到以下內容。
在IDE 1中運行時,您將看到以下內容。
1我使用Visual Studio 2010對此進行了測試。
當調試器中斷程序時,所有線程都將停止。
在Debug -> Windows -> Threads
屏幕中,您可以看到線程。 您可以“凍結”線程,這意味着如果繼續運行該程序,它將保持暫停狀態。
因此,即使調試器運行,也可以使某些線程停止。 相反是不可能的:當調試器處於中斷模式時,沒有線程可以運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.