【发布时间】:2010-03-09 12:20:32
【问题描述】:
我有一个通过 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 窗体。
【问题讨论】:
标签: c# multithreading semaphore