[英]Why does Win32Exception thrown in .NET thread pool cause application hang under a debugger?
這是我簡單的C#控制台應用程序:
using System.Diagnostics;
using System.Threading;
public static class Program
{
public static int Main(string[] args)
{
var e = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(state =>
{
Process.Start("nonexistent path");
e.Set();
});
e.WaitOne();
return 0;
}
}
如果我在調試器中運行該程序,它將在關機時掛起。 如果我替換行Process.Start("nonexistent path");
(它將引發System.ComponentModel.Win32Exception
並throw new System.Exception();
它不會掛起,並且程序會按預期終止。
在我看來,.NET / CLR或調試器必須以某種特殊方式處理Win32Exception
。 這是預期的行為嗎?
這是在.NET / CLR 4.0上運行的,其中工作線程上的未處理異常會終止應用程序:CLR 2.0及更高版本就是這種情況( http://msdn.microsoft.com/zh-cn/library/ms228965.aspx ) 。
更新
到目前為止,從Cygwin終端啟動程序時,我只能在32位Windows操作系統上重現此問題。
還有另一個問題:創建的ManualResetEvent未設置。 因為后台線程在設置ManualResetEvent之前失敗,所以主線程被卡在@ event.WaitOne()語句上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.