use*_*804 4 .net c# exception-handling task-parallel-library async-await
我运行一个包含2个项目的解决方案:app和sdk.
通过应用程序,我创建了一个sdk的实例,以便应用程序可以启动.问题是,当我在Task内部运行的代码中遇到Exception时,不会抛出Unhandled Exception,因此我的应用程序一直在运行,并且没有意识到SDK中发生了意外情况.
我AppDomain.CurrentDomain.UnhandledException在App和SDK中注册了该事件,但正如在任务中抛出异常时所述,不会调用事件处理程序.
有什么东西我错过了吗?
两个答案都有些(但不完全)完整.
处理故障任务的最佳方法是异步等待它完成使用await.这将重新抛出原始存储的异常:
try
{
await task;
}
catch (Exception e)
{
// handle exception
}
Run Code Online (Sandbox Code Playgroud)
如果你不能这样做(或者不想),你也可以使用task.Wait()同步等待并抛出AggregateException包含原始异常的内容InnerExceptions或者注册一个处理它的延续(即task.ContinueWith(t => // handle exception))
在.Net 4.0中,未观察到的任务异常会导致整个过程失效.该TaskScheduler.UnobservedTaskException事件是崩溃前处理异常的最后一个选项(非常类似于UnhandledException).在.Net 4.5中,这种类型的异常不再崩溃应用程序,但事件仍然会引发.
如果你想在这种情况下崩溃应用程序(我怀疑你这样做)你可以设置<ThrowUnobservedTaskExceptions enabled="true"/>为Yuval指出.您可以使用事件本身来处理由于以下两个原因而不是最佳的异常:
确保await您的任务在发生异常时进行处理.UnobservedTaskException如果您错过任务,也可以用作捕获所有内容.
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |