【发布时间】:2013-04-15 09:45:27
【问题描述】:
我正在研究创建需要在多个线程上执行的任务。我可以创建大量任务,例如 2000 个。我想限制同时排队和执行的任务数量。有没有办法创建一定数量的任务,然后在完成时创建新的任务?尝试确定任务调度程序是否对此有帮助。
编辑:
换一种说法……我是否有理由要限制同时创建/排队/执行的任务的数量,因为我可能有一个非常大的数字,例如2000. 任务调度程序是否以最佳方式调度任务,似乎找不到任何关于它实际工作方式的信息......
编辑:
我没有使用 Parallel.Foreach。我决定使用计数器,并根据最大数量的计数器和当前的任务数,创建任务或等到不超过最大数。
【问题讨论】:
-
搜索
MaxDegreeOfParallelism的主题。好像讨论过很多次了 -
谢谢。我确实遇到过这些帖子,但似乎您需要指定核心数量,我不明确知道有多少核心或多少任务可以同时运行而不会造成瓶颈......而且似乎并行运行也使用阻塞?
-
你能解释一下你到底想做什么吗?为什么你有这么多
Tasks,你在处理一些收藏吗?如果你这样做了,Parallel.ForEach()或 PLINQ 会为你工作吗? -
“我没有使用 Parallel.Foreach。”你能解释一下为什么不吗?它看起来正是你所需要的,但如果你不告诉我们它实际上是什么就很难说。
-
@svick 根据我所读到的有关 parallel.foreach 的内容(我可能是错的),它会阻止所有处理,直到每项任务完成。我还需要创建任务发送大约 2000 封电子邮件,我真的不希望它阻止任何进一步的处理。另外,我正在尝试控制产生的线程数。我希望进行某种轮询,所以它只创建 x 个线程,如果超过最大值,它会等待一个空闲线程。
标签: .net task-parallel-library