微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

等待任务或访问其异常属性未观察到任务的异常结果,未观察到的异常是

如何解决等待任务或访问其异常属性未观察到任务的异常结果,未观察到的异常是

如果创建一个Task,并且您从未调用task.Wait()或尝试检索a的结果,那么Task<T>当该任务由垃圾收集器收集时,它将在完成过程中关闭您的应用程序。有关详细信息,请参见TPL中 MSDN上有关异常处理页面

最好的选择是“处理”异常。这可以通过延续来完成- 您可以将延续附加到任务,并记录/吞咽/等发生的异常。这提供了记录任务异常的干净方法,并且可以编写为简单的扩展方法,即:

public static void LogExceptions(this Task task)
{
    task.ContinueWith( t =>
    {
         var aggException = t.Exception.Flatten();
         foreach(var exception in aggException.InnerExceptions)
             LogException(exception);
    }, 
    TaskContinuationoptions.OnlyOnFaulted);
}

通过上述操作,您可以通过以下方式阻止任何任务拆解应用程序并对其进行记录:

Task.Factory.StartNew( () => 
   { 
       // Do your work...
   }).LogExceptions();

或者,您可以订阅TaskScheduler.UnobservedTaskException并在那里进行处理。

解决方法

这是什么意思,如何解决?

我正在使用TPL任务。

整个错误

等待任务或访问其异常属性未观察到任务的异常。结果,未观察到的异常被终结器线程抛出。

在System.Threading.Tasks.TaskExceptionHolder.Finalize()

mscorlib

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。