我使用的是应用程序级taskobserveRErrorhandler。处理错过的错误。但是我正在使用尝试捕捉的原因,为什么我会得到这个例外。如何解决这个指导
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
如下所述。
为了使开发人员更容易根据任务编写异步代码,.NET Framework 4.5更改了未观察到的异常的默认异常行为。尽管未观察到的异常仍然提高了未观察到的taskexcextion异常,但默认情况下该过程不会终止。从.NET Framework 4.5开始,您可以使用配置元素恢复为.NET Framework 4的行为并终止该过程:
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="false"/>
</runtime>
</configuration>
您的任务之一是抛出未处理的异常,这就是为什么它以任务结束的原因。您要么必须找到抛出异常的位置,要么可以默默地忽略它(如果您知道自己在做什么(:只需设置观察到的异常即可。
private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
e.SetObserved();
LogException(e.Exception as Exception);
}
可悲的是,您不能为CurrentDomainNunHandledException做到这一点。当一个例外情况下,为时已晚,您的应用将被杀死,但至少您有机会记录问题。