X 秒以内にタスクを完了する必要があり、それが完了しない場合は、続行して残りのタスクを処理したい場合がよくあります。
私は次のようなものにデフォルト設定しています:
Thread worker = new Thread(() => {
// do some long operation
});
Thread monitor = new Thread(() => {
Thread.Sleep(10000);
if(worker != null && worker.IsAlive) {
worker.Abort();
worker = null;
}
StartNextTask();
});
monitor.Start ();
worker.Start();
これは機能しますが、2 つのスレッドを使用するため面倒です (はい、Task
クラスを使用してスレッドプールのスレッドを使用することもできます)。
AutoResetEvent
前者はワーカーが完了するまでモニタースレッドをブロックし、駆動型アプローチはクライアントがイベントを呼び出してモニターに通知することに依存しているため、とevent
ベースモデルは完全には機能しません。event
同じセマンティクスに従うことができるこれに代わるパターンはありますか?