Как приложение 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();
}
Единственное известное мне решение — никогда не позволять исключению «ускользать» необработанным. Есть ли другое, более глобальное и тщательное решение для этого?