UnobservedTaskException

UnobservedTaskException

我正在开发一个asp.net mvc应用程序。我的应用程序的体系结构如下:


一个DBAccessLayer //用于访问数据库的层
//连接1和3的ServiceLayer层。
WebLayer // Web UI层


我想记录所有应用程序异常,包括TaskScheduler.UnobservedTaskException事件中的异常。

我已经测试过要执行以下操作:

protected void Application_Start()
{
    ...
    TaskScheduler.UnobservedTaskException += (object sender, UnobservedTaskExceptionEventArgs excArgs) =>
    {
      ErrorSignal.FromCurrentContext().Raise(excArgs.Exception);
      excArgs.SetObserved();
    };
}


但是,当引发UnobservedTaskException事件时,应用程序崩溃,异常如​​下:

    System.ArgumentNullException was unhandled
         Message=Value cannot be null.
         Parameter name: context
         Source=Elmah
         ParamName=context
    StackTrace:
         at Elmah.ErrorSignal.FromContext(HttpContext context) in c:\builds\ELMAH\src\Elmah\ErrorSignal.cs:line 67
         at MyMvcApplication.<Application_Start>b__0(Object sender, UnobservedTaskExceptionEventArgs excArgs) in ...\Global.asax.cs:line 82
         at System.Threading.Tasks.TaskScheduler.PublishUnobservedTaskException(Object sender, UnobservedTaskExceptionEventArgs ueea)
         at System.Threading.Tasks.TaskExceptionHolder.Finalize()


另外,我将UnobservedTaskException事件放在WebLayer的global.asax.cs中,当DBAccessLayer和ServiceLayer具有未观察到的异常时可以触发该事件吗?

谢谢。

最佳答案

看来,当您的处理程序被解雇时,就没有HttpContext了,因为调度的任务没有作为HTTP请求的一部分运行。而不是使用

ErrorSignal.FromCurrentContext().Raise


你可以用

ErrorLog.GetDefault(null).Log

关于c# - 如何使Elmah与UnobservedTaskException一起工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9576451/

10-12 05:13