2010-03-09 80 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

順便說一下,您可以將信號量與線程池結合起來:在做任何工作之前讓每個工作項等待信號量。