如何在asp.net mvc中处理未观察到的exception

我特别询问如何处理未观察到的exception,而不是未处理的exception。 这个问题也与这个问题不同, 这个问题是关于如何引发即发即弃异步方法,而不是如何处理未观察到的exception,尽管它们是相关的。

未观察到的exception是由下面显示的示例引起的类型,取自此处 :

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()吗?
  • 这些未观察到的exception是否会进入Application_Error()? 如果是这样,您如何识别它们或阻止它们在Application_Error中出现。

这个问题很相似,但没有令人满意的答案/解释。