現在、いくつかの同時作業を行うために 3 つのスレッドを生成しています。すべてのスレッドを同時に実行したいが、続行する前にすべてのスレッドを完了させたいので、Threadpooling を使用してセットアップしました。コードの要点は次のとおりです。
_resetEvents = new ManualResetEvent[3];
_resetEvents[0] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(DoWorkA);
_resetEvents[1] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(DoWorkB);
_resetEvents[2] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(DoWorkC);
WaitHandle.WaitAll(_resetEvents);
しかし、私のメソッドはすべて同じコード ベースを使用しています。適切なスレッドを設定するためだけに 3 つのメソッドに分割しました。
private void DoWorkA(object o) {
var workerClass = new WorkerClass();
workerClass.Process();
_resetEvents[0].Set();
}
private void DoWorkB(object o) {
var workerClass = new WorkerClass();
workerClass.Process();
_resetEvents[1].Set();
}
private void DoWorkC(object o) {
var workerClass = new WorkerClass();
workerClass.Process();
_resetEvents[2].Set();
}
明らかに、あまり DRY ではありません。4 つまたは 5 つのスレッドを使用したいのですが、完了時に Set() が正しい _resetEvent を設定していることを確認したいからです。
これを安全に実行し、よりドライでスケーラブルにする方法について何か提案はありますか?