检查信号量的每个线程是否已完成
问题描述:
我有一个运行槽信息的工作对象列表。检查信号量的每个线程是否已完成
下面是代码的示例:
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
}
每个作业对象具有状态构件variableA的(0:新,1:INPROGRESS,2:已完成,3:completedWithErrors)。
我想知道在继续执行脚本之前,检查列表中的每个作业都已完成的最佳方法是什么?
注:我有一个线程池,并为WaitAll尝试过,但它doenst让我有线程的数量有限(无二次效应)像一个信号呢,我也打的大小的限制ManualResetEvent数组,因为它是一个Windows窗体。
答
您通常可以在单独的foreach
循环中的每个线程上调用Thread.Join
。
顺便说一下,您可以将信号量与线程池结合起来:在做任何工作之前让每个工作项等待信号量。