У меня есть семафор, который запускается через список объектов 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: завершенWithErrors).
Мне было интересно, как лучше всего проверить, что каждая работа в списке выполнена, прежде чем продолжить работу со сценарием.
Примечание: Я пробовал раньше с ThreadPool и WaitAll, но это позволяет мне иметь ограниченное количество потоков (без дополнительных эффектов), как семафор, и я также столкнулся с ограничением размер массива ManualResetEvent, потому что это форма Windows.