gpt4 book ai didi

.net - 使用任务并行库时如何处理所有未处理的异常?

转载 作者:行者123 更新时间:2023-12-03 07:03:45 26 4
gpt4 key购买 nike

我在 .NET 4.0 中使用 TPL ( Task Parallel Library )。我想通过使用 Thread.GetDomain().UnhandledException 事件来集中所有未处理异常的处理逻辑。然而,在我的应用程序中,对于使用 TPL 代码启动的线程,该事件永远不会触发,例如Task.Factory.StartNew(...)。如果我使用像 new Thread(threadStart).Start() 这样的东西,该事件确实会被触发。

This MSDN article建议在使用 TPL 时使用 Task.Wait() 捕获 AggregateException,但这不是我想要的,因为这种机制不够“集中”。

有人遇到同样的问题还是只有我一个人遇到同样的问题?您有什么解决办法吗?

最佳答案

我认为TaskScheduler.UnobservedTaskException Event是你想要的:

Occurs when a faulted Task's unobserved exception is about to trigger exception escalation policy, which, by default, would terminate the process.

因此,此事件与您在问题中提到的 DomainUnhandledException 类似,但仅针对任务发生。

顺便说一句,未观察到的异常政策(是的,这不是未观察到的异常,MS 的家伙再次发明了新词......)从 .NET 4.0 更改为 .NET 4.5。在 .NET 4.0 中,未观察到的异常会导致进程终止,但在 .NET 4.5 中则不会。这都是因为我们将在 C# 5 和 VB 11 中引入新的异步内容。

关于.net - 使用任务并行库时如何处理所有未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2707295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com