我正在使用应用程序级taskUnObservedErrorhandler。处理未解决的错误。但是我到处都使用try catch来获取此异常的原因。如何解决这个问题,请指导
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
答案 0 :(得分:0)
如here所述。
为使开发人员更轻松地基于任务编写异步代码,.NET Framework 4.5更改了未观察到的异常的默认异常行为。尽管未观察到的异常仍会引发UnobservedTaskException异常,但该过程默认情况下不会终止,而是在引发事件后由运行时处理该异常,无论事件处理程序是否观察到该异常都可以配置此行为。从.NET Framework 4.5开始,您可以使用配置元素还原为.NET Framework 4的行为并终止该过程:
<configuration>
<runtime>
<ThrowUnobservedTaskExceptions enabled="false"/>
</runtime>
</configuration>
答案 1 :(得分:0)
您的任务之一引发了未处理的异常,这就是为什么它以TaskScheduler_UnobservedTaskException结尾。您要么必须找到引发异常的位置,要么可以默默地忽略它(如果您知道自己在做什么):只需将异常设置为观察到即可。
private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
e.SetObserved();
LogException(e.Exception as Exception);
}
遗憾的是,您无法对CurrentDomainOnUnhandledException执行此操作。当出现异常时,为时已晚,您的应用将被杀死,但至少您有机会记录问题。