gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:09:33 25 4
gpt4 key购买 nike

我有一个通过作业对象列表运行的信号量。

这是代码示例:

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
}

每个job对象都有一个status成员变量a(0:new,1:inProgress,2:completed,3:completedWithErrors)。

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

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

最佳答案

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

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

关于c# - 检查信号量的每个线程是否已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2408900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com