これは、システムプロセスを終了することではなく、「自分自身」を殺すことです。私はいくつかの並列のtheadを持っていますが、さまざまな理由でハングする可能性があります。
スレッドに時間がかかりすぎる場合は、すでにウォッチドッグを作成しました。
TimerCallback timerDelegate = new TimerCallback(CheckProcessStatus);
System.Threading.Timer watchDogTimer = new Timer(timerDelegate, new ProcessHealth(plog), 1000 * 60, 1000 * 60);
try
{
// lots of code here
} finally
{
watchDogTimer.Dispose();
}
ウォッチドッグ:
public void CheckProcessStatus(Object timerState) {
ProcessHealth ph = (ProcessHealth)timerState;
System.writeLine(string.Format("process runs for {0} minutes!", ph.WaitingTime);
if (ph.WaitingTime>60) {
// KILL THE PROCESS
}
}
「ここにたくさんのコード」が長すぎる場合は、スレッドがどのような状態であっても、スレッドを終了したいと思います(「プロセスの強制終了」で)。
最善のアプローチは何でしょうか?
Thread.CurrentThread.Interrupt()
また
Thread.CurrentThread.Abort()?
それとももっと良いアプローチがありますか?(ブール値の「stop」変数のような「単純な」メカニズムは使用できません。「ここにたくさんのコード」があるため、リフレクションなどを介して他のクラスを非常に動的に呼び出します。
それも機能しますか?または、監視対象のスレッドではなく、ウォッチドッグスレッドを強制終了しますか?