我特别询问如何处理未观察到的异常,而不是未处理的异常。这个问题也与这个问题不同,后者询问如何提出即发即弃的异步方法,而不是如何处理未观察到的异常,尽管它们是相关的。
未观察到的异常是由下面显示的示例引起的类型,取自此处:
Task op1 = FooAsync();
Task op2 = BarAsync();
await op1;
await op2;
作为一项规则,我会尽量避免这种情况,但如果发生这种情况,我不希望我的网站意外退出,也不希望这些异常被默默吞下。我至少想在一个地方处理它们并记录它们。我不想用elmah。
现在,我认为我们可以从这里做类似这个例子的事情:
TaskScheduler.UnobservedTaskException += (sender, e) =>
{
Console.WriteLine("Saving the day! This exception would have been unobserved: {0}",
e.Exception);
e.SetObserved();
};
但是,我的问题是: -
- 这个放在哪里,可以放在 Application_Start() 中吗?
- 这些未观察到的异常会进入 Application_Error() 吗?如果是这样,您如何识别它们或防止它们出现在 Application_Error 中。
这个问题类似,但没有令人满意的答案/解释。