【发布时间】:2017-02-08 01:58:51
【问题描述】:
我有一个创建一些工作线程的消费者线程。这些线程必须在活动和等待状态之间切换。当所有工作线程都处于等待状态时,就意味着当前工作已经完成。如何让消费者线程等待所有工作线程处于等待状态?我希望所有工作线程上的行为与 Thread.Join() 非常相似,但是,我希望线程继续运行以完成下一项工作。我无法创建新线程,因为作业处于紧密循环中,并且创建新线程的成本很高。
【问题讨论】:
-
你必须使用显式工作线程吗?您不能将它们表示为Tasks 吗?然后使用Task.WhenAll 检查是否所有任务都已完成。如果您确实必须使用线程,请查看 AutoResetEvents 和 WaitHandle.WaitAll。
-
是的,任务可以更好地工作。我不太确定我使用的 .net 版本是否有任务。也许在紧密循环中创建任务是错误的,因为我在 Xamarin 上使用 Mono,而且垃圾收集器不是很好。
标签: c# multithreading parallel-processing wait