Ami Bar社の.Net 3.5とC#SmartThreadPoolを使用して複数の作業項目を管理しています。私たちのアプリがシャットダウンすると、できるだけ早く作業を完了させなければならないすべての作業項目を「教えて」、それから実行中の作業項目を完了して終了させる猶予期間を与えたいと考えています。私たちの作業項目は協調的であり、作業を完了して長時間実行されるループから抜け出すかどうかを確認する必要があります。SmartThreadPoolを使用してワークアイテムをキャンセルする - Wait-Killする方法
workItemResult.Cancel(false)を使用して作業項目を完了し、作業項目内でSmartThreadPool.IsWorkItemCanceledを使用して作業を停止することを通知するのは良い考えですが、WaitAllは待機しません猶予期間中にブロックすることはできません。
作業項目ごとにWorkItemGroupを作成して作業を開始し、作業項目でCancel(false)を呼び出してからworkItemGroup.WorkForIdle(gracePeriod)を呼び出すが、これが追求する価値があるかどうかをチェックしたかった。
私はこれについて何か考えていただきたいと思います。ここで説明するように、あなたが `Task`sを使用していないのはなぜ
おかげ
を終わりましたか? – svick
申し訳ありませんが、私たちは.Net 3.5を使用しており、4.0へのアップグレードは現時点では実現不可能であると言及するのを忘れていました。私はTaskクラスが.Net 4.0で導入されたと信じています。 – alecswan