Job オブジェクトのリストを介して実行されるセマフォがあります。
コードのサンプルを次に示します。
List<Job> jobList = jobQueue.GetJobsWithStatus(status);
if (jobList.Count > 0)
{
foreach (Job job in jobList)
{
semaphore.WaitOne();
// Only N threads can get here at once
job.semaphore = semaphore;
ThreadStart threadStart = new ThreadStart(job.Process);
Thread workerThread = new Thread(threadStart);
workerThread.Start();
}
//check that every thread has completed before continuing
}
すべてのジョブ オブジェクトには、ステータス メンバー変数a (0: 新規、1: 進行中、2: 完了、3: 完了したエラーあり) があります。
スクリプトを続行する前に、リスト内のすべてのジョブが完了したことを確認する最善の方法は何かと考えていました。
注:前に ThreadPool と WaitAll を試してみましたが、セマフォのように (二次的な影響なしで) 限られた量のスレッドを持つことができず、ManualResetEvent 配列のサイズの制限にも達しました。 Windows フォーム。