检查信号量的每个线程是否已完成

时间:2010-03-09 12:20:33

标签: c# multithreading semaphore

我有一个通过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
}

每个作业对象都有一个状态成员variablea(0:new,1:inProgress,2:completed,3:completedWithErrors)。

我想知道在继续编写脚本之前检查列表中的每个作业的最佳方法是什么。

注意:我之前尝试使用ThreadPool和WaitAll,但它确实允许我拥有有限数量的线程(没有辅助效果),就像信号量一样,而且我也遇到了限制ManualResetEvent数组的大小,因为它是Windows窗体。

1 个答案:

答案 0 :(得分:1)

您通常可以在单独的Thread.Join循环中的每个线程上调用foreach

顺便说一下,你可以将信号量与线程池结合起来:在做任何工作之前让每个工作项等待信号量。