我有一個線程池,我使用一個庫,如果滿足某些條件會拋出異常。我的問題是,如果IDE耗盡,線程是否會停下來,或整個程序會停止?在線程池中拋出異常
回答
如果應用程序是.Net 2+,非主線程上的未處理異常將會使進程變平。
您可以使用app.config LegacyUnhandledExceptionPolicy
設置來配置此行爲,但我不會推薦此操作,因爲它可能會掩蓋嚴重的錯誤。
更新
如果您希望忽略偶爾超時異常,考慮將你的Web服務調用在try \ catch塊,並忽略超時異常:
try
{
//Call WebService
}
catch(System.Net.WebException ex)
{
//Ignore
}
當調試器打破了程序,所有的線程都會停下來。
在Debug -> Windows -> Threads
屏幕上,您可以看到線程。您可以「凍結」一個線程,這意味着如果您繼續運行該程序,它將保持停止狀態。
因此即使調試程序運行時也可能會使一些線程暫停。相反是不可能的:當調試器處於中斷模式時,沒有線程可以運行。
那麼當它出現在現實世界中時會發生什麼? –
@Joe Tyman:啊,所以通過「脫離IDE」你的意思是「在IDE之外」:)在現實世界中,程序將崩潰,Windows將向用戶顯示一個對話框。你可以通過三種方法來防止這種情況:1)所有線程中的try ... catch塊; 2)LegacyUnhandledExceptionPolicy設置; 3)如果作爲Windows服務運行,線程中的異常不會終止程序 – Andomar
所以讓我們回顧你所擁有的:
- 你有一個
TheadPool
線程執行的方法。 - 此方法將引發異常。
- 該異常不會由
try-catch
塊處理。 - 該應用程序在IDE外部運行。
現在我們可以使用下面的代碼輕鬆測試它。注意下面的觀察,尤其是大膽的觀察,因爲它們在你的問題中很有趣。
public static void Main()
{
ThreadPool.QueueUserWorkItem(
(state) =>
{
throw new InvalidOperationException();
}, null);
while (true)
{
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now.ToString());
}
}
在IDE外部運行時,您將觀察到以下情況。
- 出現一個對話框,提示「[應用程序]遇到問題,需要關閉,我們對此造成的不便深表歉意。」
- 應用程序將繼續運行並每秒打印當前時間。
- 在單擊關閉對話框後,應用程序將終止。
在IDE內運行時您將觀察到以下內容。
- IDE將攔截異常並使用其自己的未處理異常窗口顯示它。
- 所有線程都將被暫停,這意味着您將看不到當前顯示的時間。
- 忽略異常並恢復調試會話將允許當前時間開始顯示。
- IDE將再次重新拋出異常並截取它。
- 所有線程都將被暫停,循環將無限期重複。
我與Visual Studio 2010
- 1. 跨線程異常拋出
- 2. 線程中拋出錯誤(異常)
- 3. Titan中的多線程拋出異常
- 4. junit在線程拋出異常
- 5. 在UI線程上拋出異常
- 6. OpenDJ SDK線程池異常
- 7. 線程池內存異常
- 8. 致命異常:java.lang.IllegalStateException:致命異常在Scheduler.Worker線程上拋出
- 9. 如何從線程拋出異常?
- 10. 異常線程「main」拋出java.lang.ClassNotFoundException:MaxTemperature
- 11. 多線程拋出異常列表
- 12. 拋出UI線程的異常
- 13. 拋出異常的線程C#
- 14. 的std ::線程創建拋出異常
- 15. 中斷主調用線程如果子線程拋出異常
- 16. 在Java中拋出自定義異常與在異常中拋出異常
- 17. 魔術異常拋出拋出異常
- 18. 拋出異常拋出異常
- 19. 在C++中拋出異常異常
- 20. 在Java中拋出異常的方法拋出異常
- 21. 在HttpRequest.GetResponse中拋出異常
- 22. 在Java中拋出異常
- 23. 在pimcore中拋出異常
- 24. 在Java中拋出異常
- 25. 在ASP.NET線程中拋出異常以使IIS無效
- 26. 在任務線程中拋出的異常,未被UnobservedTaskException捕獲
- 27. ImageIO.read在多線程執行中拋出異常
- 28. PrintWriter#println()在線程中拋出一個NullPointerException異常
- 29. 嵌套線程是否可以爲父線程拋出異常?
- 30. 從不同的線程訪問GUI線程拋出異常
測試該如何我剛剛殺線程? –
@Joe你能解釋一下爲什麼你想殺死這個線程。你想解決什麼問題? –
+1 LegacyUnhandledExceptionPolicy看起來好像會做OP所要的那樣 – Andomar