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?