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();
}
私が知っている唯一の解決策は、例外を未処理のまま「エスケープ」させないことです。これに対する、よりグローバルで徹底的なソリューションは他にありますか?