Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 任务并行库实现中的查询_.net_Parallel Processing_Task_Task Parallel Library - Fatal编程技术网

.net 任务并行库实现中的查询

.net 任务并行库实现中的查询,.net,parallel-processing,task,task-parallel-library,.net,Parallel Processing,Task,Task Parallel Library,大家好 我的问题是关于TaskParallel库的实现 我随身带着一张单子。我需要并行执行所有任务,并且在任何时间点,正在执行的任务数应该是3。i、 e,如果我有9个任务,那么最初应该启动前3个任务,如果完成了任何1个任务,那么应该启动下一个任务,并且在任何时间点,应该运行的任务不超过3个 实现这一点的最佳方式是什么 谢谢 您可以实现一个限制并行度的调度程序 我不清楚您的场景,但这种方法可以用来限制正在执行的任务的最大数量,但可能无法保证三个任务始终运行,只是不能同时运行三个以上的任务 另一种

大家好

我的问题是关于TaskParallel库的实现

我随身带着一张单子。我需要并行执行所有任务,并且在任何时间点,正在执行的任务数应该是3。i、 e,如果我有9个任务,那么最初应该启动前3个任务,如果完成了任何1个任务,那么应该启动下一个任务,并且在任何时间点,应该运行的任务不超过3个

实现这一点的最佳方式是什么


谢谢

您可以实现一个限制并行度的调度程序

我不清楚您的场景,但这种方法可以用来限制正在执行的任务的最大数量,但可能无法保证三个任务始终运行,只是不能同时运行三个以上的任务

另一种方法可能是启动三个任务,让它们从包含执行实际工作所需信息的ConcurrentQueue读取数据。这将允许您始终有三件事情并行执行


本质上,您所做的与TPL背后的理念有些不一致,TPL实际上是将您的工作表示为潜在的并行性,并在尽可能多的可用内核上安排运行时时间表。

您是否已经研究过System.Threading?有一个并行类,这似乎是您正在寻找的。

如果您正在使用,您可以使用一个重载,该重载采用一个值,您可以将其设置为
MaxDegreeOfParallelism=3
。如果您使用的是PLINQ,则可以使用


请记住,这只会限制在任何给定时间执行工作的最大线程数,不能保证所有三个线程都能同时启动/运行。

System.Threading.Parallel是任务并行库(TPL)的一部分