我有一个通过 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:inProgress,2:已完成,3:completeWithErrors)。
我想知道在继续执行脚本之前检查列表中的每个作业是否已完成的最佳方法是什么。
注意:我之前尝试过使用 ThreadPool 和 WaitAll,但它确实允许我像信号量那样拥有有限数量的线程(没有辅助效果),而且我还遇到了 ManualResetEvent 数组大小的限制,因为它是Windows 窗体。