この質問に重複フラグを設定しないでください。 「ThreadAbortException が発生する理由」ではなく、「ThreadAbortException 後に w3wp.exe プロセスが終了する理由」に関するものです。
次のコード サンプルを含む単純な Web アプリケーションがあるとします。
protected void Page_Load(object sender, EventArgs e)
{
Response.Redirect("http://google.com");
}
実際には、次のようなことを意味します ( Is Response.End() は有害と見なされますか?を参照):
protected void Page_Load(object sender, EventArgs e)
{
...response write some data...
System.Threading.Thread.CurrentThread.Abort();
}
私のマシン (Windows 10 Pro + IIS) では、このコードにより IIS プール プロセスがエラー コード 0x0 (リダイレクトは実行されません) で終了します。他のマシン (Windows 10 ではない) では、このコードは ThreadAborted 例外のみを生成しますが、プロセスは引き続き動作します (リダイレクトが実行されます)。
誰かがこのサンプルをチェックして、何が起こっているのか説明できますか?
更新 ここに、この問題に関連するいくつかの Windows イベント ログがあります。
ログ #1
未処理の例外が発生し、プロセスが終了しました。
アプリケーション ID: /LM/W3SVC/1/ROOT/AS
プロセスID: 6700
例外: System.Threading.ThreadAbortException
メッセージ: スレッドは中止されました。
StackTrace: System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr、HttpContext コンテキスト) で System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper (IntPtr rootedObjectsPointer、IntPtr nativeRequestContext、IntPtr moduleData、Int32 フラグ) で System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (IntPtr rootedObjectsPointer、IntPtr nativeRequestContext、IntPtr moduleData、Int32 フラグ)
ログ #2
Faulting application name: w3wp.exe, version: 10.0.10240.16384, time stamp: 0x559f3dad
Faulting module name: KERNELBASE.dll, version: 10.0.10240.16384, time stamp: 0x559f3b2a
Exception code: 0xe0434352
Fault offset: 0x000b3e28
Faulting process id: 0x1a2c
Faulting application start time: 0x01d0e4b1b3ed01cb
Faulting application path: C:\WINDOWS\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\WINDOWS\SYSTEM32\KERNELBASE.dll
Report Id: 23b5298d-3b36-49c7-a294-de9c864b703f
Faulting package full name:
Faulting package-relative application ID: