Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
C# 控制嵌套块之间最大并行度的TPL数据流_C#_Multithreading_Parallel Processing_Task Parallel Library_Tpl Dataflow - Fatal编程技术网

C# 控制嵌套块之间最大并行度的TPL数据流

C# 控制嵌套块之间最大并行度的TPL数据流,c#,multithreading,parallel-processing,task-parallel-library,tpl-dataflow,C#,Multithreading,Parallel Processing,Task Parallel Library,Tpl Dataflow,假设我有一个动作块A,它以4的最大并行度并行执行一些工作 假设我有一个例子,动作块A在某些情况下做功X,在其他情况下做功Y。X是一些小的工作,Y是一些较大的工作,需要将其拆分为较小的工作块,因此我也需要将它们并行化。 因此,在worky内部,我需要将工作块并行化到最大程度4,但在这一点上,我可能有4个并行执行的a块,这可能导致并行运行“a-X,a-X,a-Y,a-Y”。这将导致1+1+4+4个并行任务,这对于我来说是太多的并行任务,因为我总是将其限制在最多4个(或任何其他选择的数量)的总体范围内

假设我有一个动作块A,它以4的最大并行度并行执行一些工作

假设我有一个例子,动作块A在某些情况下做功X,在其他情况下做功Y。X是一些小的工作,Y是一些较大的工作,需要将其拆分为较小的工作块,因此我也需要将它们并行化。
因此,在worky内部,我需要将工作块并行化到最大程度4,但在这一点上,我可能有4个并行执行的a块,这可能导致并行运行“a-X,a-X,a-Y,a-Y”。这将导致1+1+4+4个并行任务,这对于我来说是太多的并行任务,因为我总是将其限制在最多4个(或任何其他选择的数量)的总体范围内


有没有办法控制包括嵌套块在内的最大并行度?

在TPL数据流中创建块时,可以通过为块指定自定义计划程序


限制并发任务数量和并发级别的简单方法是在代码中使用,并带有所需的参数。

可以发布相关代码吗?不清楚嵌套块的确切含义。一般来说,如果你有工作X和工作Y,那么你会有
BlockX
BlockY
。现在,如果这些具有相同的输入和输出类型,那么您可以使用适当的
谓词将缓冲区链接到每个缓冲区,以对工作X和工作Y进行排序。如果您想要施加超出单个块边界的并发限制,那么您可以查看可用选项的答案。