Как обрабатывать необработанные исключения потоков в ASP.NET?

Как приложение 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();
}

Единственное известное мне решение — никогда не позволять исключению «ускользать» необработанным. Есть ли другое, более глобальное и тщательное решение для этого?

8
задан usr 20 June 2012 в 10:03
поделиться