【发布时间】:2014-02-08 21:04:52
【问题描述】:
我知道后台线程上未处理的异常会导致网站关闭,因此防止网站关闭,我将下面的代码代码放入 Global.asax 以防止它。
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);
}
但即使是这段代码也不能阻止网站关闭。我在这里缺少什么?
【问题讨论】:
-
页面中的异常不会导致整个站点宕机。在这种情况下,“后台线程”是什么意思?
-
手动创建线程如 new Thread(()=> new ArgumentException()).Start()
-
在 ASP.NET 中没有办法防止未处理的后台异常终止进程。您最好的选择是在线程入口点处理异常(如果可能)。这些是什么类型的线程/抛出了什么样的异常?如果您更多地描述您的场景,我们可能会提供指导。或者,您可能希望使用 Task.Run 而不是手动生成线程。
-
我想阻止我的网站关闭,因为重启会导致一些性能开销,因为我还在 global.asax 端做了一些昂贵的初始化工作。如果我更喜欢 Task 而不是使用线程,Task 将阻止关闭?
-
关闭与您对池的设置有关。您可以在此处设置是否在 5 秒内发生 5 个错误以关闭池。在那里禁用它,或使用 try/catch 处理您的错误。
标签: c# asp.net asp.net-mvc asp.net-mvc-4 exception-handling