次の記事のコードを使用して、独自の ThreadPool を実装しました: http://www.developer.com/net/article.php/3783756
これが私が達成したいことです。タイマーを介してトリガーされたサービスは、新しいジョブを実行するために 5 秒ごとにデータベースにクエリを実行する必要があります。ジョブは基本的に、引数を指定して実行する必要があるコマンドライン プログラムに関する情報のみです。
これらのプログラムは、最大 50 個以上同時に実行できる必要があります。プログラムは、数秒、数分、さらには数時間実行できます。サービスは、これらのプログラムを常に制御する必要があります。つまり、たとえば、要求に応じてプログラムを強制終了できる必要があります。
上記の ThreadPool 実装を使用して、実行するプログラムをキューに入れ始め、サービスが実際にいつそれらを実行したかを確認できました。今のところ問題ありません。ただし、ここでのメカニズムは次のように機能します。
ThreadPool はワーカースレッドを作成して開始します。プログラムがキューに入れられるたびに、ワーカースレッドはこれを認識し、本質的に System.Diagnostics.Process オブジェクトをインスタンス化して外部プログラムを開始するデリゲートを呼び出します。その後、スレッドはその作業を終了し、さらにプログラムを開始できるようになります。ただし...開始するプログラムがない場合、アイドルタイマーによりスレッドマネージャーがスレッドを強制終了し、開始されたプロセスを中断します。
これは私が必要とするものではありません。ここで誰かが、私がよりよく説明したシナリオを処理する方法を知っていますか?