【问题标题】:Observed Task Exception calling TaskScheduler.UnobservedTaskException观察到的任务异常调用 TaskScheduler.UnobservedTaskException
【发布时间】:2013-01-28 19:12:38
【问题描述】:

我的应用程序是 .NET 4.5,我有一个事件处理程序,可以记录未观察到的任务异常的所有错误。

TaskScheduler.UnobservedTaskException += (sender, e) => e.Exception.Handle(ex =>
{
    logger.Error(e.Exception);
    return false;
});

我返回 false,是什么关闭了应用程序。模拟 .NET 4.0 行为。

我的问题是,如果我观察结果,为什么这段代码会调用事件并导致我的应用程序崩溃?

try
{
    var resultado = httpClient.GetAsync('http://.....').Result;
}
catch (Exception ex)
{
    logger.Error(ex);
}

更新:经过一些调试,我发现当我没有调用 .Result 并导致问题时,我有另一个任务。

【问题讨论】:

  • 你读错了事件。它不是指“未观察到的任务的异常”,而是“未观察到的任务异常”。
  • 我编辑了我的问题。我实际上是“获取”异常,以记录。当我调用 Result 时,它应该同步抛出异常
  • 我冒昧地设置了一个更精确的标题。希望你不要介意。
  • 实际上问题不在于 TaskScheduler.UnobservedTaskException。因为我没有将异常设置为 Observed 那里。 TaskScheduler.UnobservedTaskException 永远不应该被调用

标签: c# asynchronous task-parallel-library task


【解决方案1】:

您应该将UnobservedTaskExceptionEventArgs.Observed 设置为true。在这一点上观察结果没有任何效果,尽管人们可能有理由相信它确实有效。

【讨论】:

    【解决方案2】:

    经过一些调试,我发现当我没有调用 .Result 并导致问题时,我有另一个任务。

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2013-11-26
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2012-09-01
      • 2017-07-27
      相关资源
      最近更新 更多