2014-02-08 59 views
0

我知道后台线程上的未处理异常会导致网站关闭,因此防止网站关闭,我将下面的代码添加到Global.asax中以防止它。防止ASP.NET(MVC)网站关闭异常

protected void Application_Error(object sender, EventArgs e) 
{ 
    System.Web.HttpContext context = HttpContext.Current; 
    System.Exception ex = Context.Server.GetLastError(); 

    context.Server.ClearError(); 

    Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 
} 

但即使这样的代码不会阻止网站关闭。我在这里错过了什么?

+0

页面异常不会导致整个网站停机。在这种情况下,“后台线程”是什么意思? –

+0

手动创建线程,如新线程(()=> new ArgumentException())。开始() – Freshblood

+1

ASP.NET没有办法阻止未处​​理的后台异常终止进程。你最好的办法是在线程入口点处理异常(如果可能的话)。这些/什么样的线程正在抛出什么样的异常?如果您稍微描述一下您的情况,我们可能会提供指导。或者,您可能希望使用Task.Run而不是手动产生线程。 – Levi

回答

1

如果您确实需要手动产生托管线程,我认为AppDomain.UnhandledException事件是您的非致命异常的唯一选择,因为Application_Error未针对在请求处理上下文外抛出的异常进行调用。

根据您在后台线程中所做的操作,您可能想要切换到I/O绑定操作的async/await模型或CPU绑定任务的TPL in general