Как лечить необработанные исключения потоков в ASP.NET?
How is an ASP.NET application supposed to deal with unhandled exceptions which are occuring on a non-request background thread (due to bugs)?
По умолчанию такие исключения приводят к завершению процесса.This is unacceptable in the setting of an ASP.NET worker process потому что одновременно выполняющиеся запросы прерываются непредсказуемо. Это также проблема производительности.
Исключения в потоке запросов не являются проблемой, поскольку 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();
}
Единственное известное мне решение состоит в том, чтобы никогда не позволять исключению & quot; бежать & quot; необработанный. Есть ли другое, более глобальное и основательное решение для этого?