Jak traktować nieobsługiwane wyjątki wątków w programie ASP.NET?

W jaki sposób aplikacja ASP.NET ma radzić sobie z nieobsługiwanymi wyjątkami, które występują na wątku tła bez żądania (z powodu błędów)?

Domyślnie takie wyjątki powodują zakończenie procesu.Jest to niedopuszczalne w ustawieniach procesu roboczego ASP.NET ponieważ jednoczesne uruchamianie żądań jest przerywane w nieprzewidywalny sposób. Jest to również problem z wydajnością.

Wyjątki w wątku żądania nie stanowią problemu, ponieważ ASP.NET obsługuje je (pokazując stronę błędu).

TheAppDomain.UnhandledException zdarzenie pozwala zaobserwować, że wystąpił wyjątek, ale w tym momencie nie można zapobiec zakończeniu.

Oto repro, które należy wkleić do indeksu kodu strony 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();
}

Jedyne rozwiązanie, jakie znam, to nigdy nie pozwalać, aby wyjątek „uciekł” nieobsługiwany. Czy jest w tym jakieś inne, bardziej globalne i dokładne rozwiązanie?

questionAnswers(3)

yourAnswerToTheQuestion