3

正如我们在 .net 4.5 中所知道的那样,UnobservedTaskException 不会使应用程序崩溃。

为了使开发人员更容易编写基于任务的异步代码,.NET Framework 4.5 更改了未观察到的异常的默认异常行为。尽管未观察到的异常仍然会引发 UnobservedTaskException 异常,但默认情况下进程不会终止。相反,在引发事件后由运行时处理异常,无论事件处理程序是否观察到异常。可以配置此行为。从 .NET Framework 4.5 开始,您可以使用配置元素恢复到 .NET Framework 4 的行为并终止进程:

好吧,假设微软决定改变多线程处理异常的体验,但为什么它只适用于 tpl 呢?为什么多线程机制的其他部分没有改变?例如,以下代码仍然会使应用程序崩溃

static void Main(string[] args)
{
    ThreadPool.QueueUserWorkItem(state => { throw new Exception(); });
    Console.ReadLine();
}

这很混乱,看起来很奇怪。有人知道这件事吗?

4

0 回答 0