タイトルを読んだのですが、Thread.Abort() が実際に中止されないのはいつですか? 多くの人が危険なコマンドであり、動作が保証されていないと言うのを聞いたことがありますが、実際にそれを再現することはできませんでした. それはいつも私のために働いています..
Thread.Abort() が一貫して失敗する特定の状況はありますか?
タイトルを読んだのですが、Thread.Abort() が実際に中止されないのはいつですか? 多くの人が危険なコマンドであり、動作が保証されていないと言うのを聞いたことがありますが、実際にそれを再現することはできませんでした. それはいつも私のために働いています..
Thread.Abort() が一貫して失敗する特定の状況はありますか?
ドキュメントも読みましたか?
スレッドがすぐに中止されるか、まったく中止されるかは保証されません。この状況は、アボート プロシージャの一部として呼び出される finally ブロックでスレッドが無限の量の計算を実行し、それによってアボートが無期限に遅延する場合に発生する可能性があります。スレッドが中止されるまで待機するには、Abort メソッドを呼び出した後にスレッドで Join メソッドを呼び出すことができますが、待機が終了する保証はありません。
...
開始されていないスレッドで Abort が呼び出された場合、そのスレッドは Start が呼び出されたときに中止されます。ブロックされているスレッドまたはスリープしているスレッドで Abort が呼び出されると、スレッドは中断されてから中止されます。
中断されたスレッドで Abort が呼び出されると、Abort を呼び出したスレッドで ThreadStateException がスローされ、中止されるスレッドの ThreadState プロパティに AbortRequested が追加されます。Resume が呼び出されるまで、ThreadAbortException は中断されたスレッドでスローされません。
アンマネージド コードの実行中にマネージド スレッドで Abort が呼び出された場合、スレッドがマネージド コードに戻るまで ThreadAbortException はスローされません。
Abort の 2 つの呼び出しが同時に来た場合、1 つの呼び出しで状態情報を設定し、もう 1 つの呼び出しで Abort を実行することができます。ただし、アプリケーションはこの状況を検出できません。
スレッドで Abort が呼び出された後、スレッドの状態には AbortRequested が含まれます。Abort の呼び出しが成功してスレッドが終了すると、スレッドの状態は Stopped に変更されます。十分な権限があれば、Abort のターゲットであるスレッドは、ResetAbort メソッドを使用して中止をキャンセルできます。ResetAbort メソッドの呼び出しを示す例については、ThreadAbortException クラスを参照してください。