c#では、例外がスローされると、プロセスがすぐに終了または強制終了されることは誰もが知っていますが、これはThreadAbortException
当てはまりません。この例外に特別な動作があるのはなぜですか。
2 に答える
メインスレッドは例外をキャンセルするか、スレッドが終了するのを待ってから処理を続行するかを選択できるためです。
スレッドを破棄するためにAbortメソッドが呼び出されると、共通言語ランタイムはThreadAbortExceptionをスローします。ThreadAbortExceptionはキャッチできる特別な例外ですが、catchブロックの最後で自動的に再度発生します。この例外が発生すると、ランタイムはスレッドを終了する前にすべてのfinallyブロックを実行します。スレッドはfinallyブロックで無制限の計算を実行するか、Thread.ResetAbortを呼び出して中止をキャンセルできるため、スレッドが終了する保証はありません。中止されたスレッドが終了するまで待機する場合は、Thread.Joinメソッドを呼び出すことができます。参加は、スレッドが実際に実行を停止するまで戻らないブロッキング呼び出しです。
ThreadAbortExceptionクラスを参照してください。
これは、ThreadAbortExceptionが、スローされたスレッドのみを終了することになっているためです。ただし、別のスレッドがまだ実行されている可能性があるため、すべてのフォアグラウンドスレッドが終了するまでプロセスは終了しません。