2010-03-09 37 views
3

我有一个运行槽信息的工作对象列表。检查信号量的每个线程是否已完成

下面是代码的示例:

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窗体。

回答

1

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

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

相关问题