特定のメソッドを実行するスレッドを作成するとき、スレッドを途中で終了する必要がある状況が発生することがあります。 Thread.Abort() メソッドは直感的な解決策のように見えますが、使用を控えることを強くお勧めします。
Thread.Abort() は本質的に危険です。スレッドの実行が中断され、例外やデータ破損が発生する可能性があるためです。さらに、スレッドを突然終了すると、リソースが解放されず、必要なクリーンアップ タスクが実行されず、アプリケーションが不安定な状態になる可能性があります。
スレッドを終了する代わりに、実装することをお勧めします。協調的なスレッド終了メカニズム。これには、要求されたときに正常にシャットダウンできるようにスレッドを設計することが含まれます。
スレッドへのシグナルとして機能するブール型フラグ (keepGoing など) を作成します。スレッドを終了する必要がある場合は、keepGoing を false に設定するだけです。
private bool keepGoing = true; while (keepGoing) { // Perform work here. }
スリープや待機など、スレッド内の特定の操作により、スレッドがブロックされる可能性があります。このような状況に対処するには、Thread.Interrupt() を呼び出して、スレッドをブロック呼び出しから抜け出すことができます。スレッドは、ThreadInterruptedException をキャッチし、必要なクリーンアップを実行できるように準備する必要があります。
try { while (keepGoing) { // Perform work here. } } catch (ThreadInterruptedException exception) { // Clean up and handle the interruption. }
協調的なスレッドの終了と割り込みの処理を実装することで、アプリケーションの安定性を損なうことなく .NET スレッドを安全に終了できます。潜在的な結果を避けるために、スレッドの終了は慎重に処理する必要があることに注意してください。
以上がThread.Abort() を使用せずに .NET スレッドを安全に強制終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。