ASP.NET 应用程序应该如何处理在非请求后台线程(由于错误)上发生的未处理异常?
默认情况下,此类异常会导致进程终止。这在 ASP.NET 工作进程的设置中是不可接受的,因为并发运行的请求会意外中止。这也是一个性能问题。
请求线程上的异常不是问题,因为 ASP.NET 会处理它们(通过显示错误页面)。
该AppDomain.UnhandledException
事件允许观察发生了异常,但此时无法阻止终止。
这是一个需要粘贴到 ASPX 页面代码隐藏中的重现。
protected void Page_Load(object sender, EventArgs e)
{
var thread = new Thread(() =>
{
throw new InvalidOperationException("some failure on a helper thread");
});
thread.Start();
thread.Join();
}
我知道的唯一解决方案是永远不要让异常“逃脱”未处理。有没有其他更全面、更彻底的解决方案?