C# 接收集合并为每个元素调用其链接块的TPL数据流
对不起,如果已经有类似的问题,我找不到 我有以下情况:C# 接收集合并为每个元素调用其链接块的TPL数据流,c#,task-parallel-library,dataflow,tpl-dataflow,C#,Task Parallel Library,Dataflow,Tpl Dataflow,对不起,如果已经有类似的问题,我找不到 我有以下情况: 我必须对图像进行一些处理,TPL数据流适合我 这里很好,因为它允许我轻松地完成我工作的不同部分 并行工作流和逻辑单元中的独立代码 有一个我无法控制的函数,它返回 图像。它被用作网格(或管道,更详细地说)中的第二个节点 精确的) Dataflow mesh中的所有其他节点都使用一个映像,因此在第二个项目符号中提到的I之后的节点期望得到一个映像(这对于并行性很重要) 是否有一个我可以使用的块(或其他解决方案)可以接受类型为IEnumerable
IEnumerable
或类似的输入,并将该IEnumerable
的每个元素转发到预期接收T
的块
我不想重新发明轮子,所以我想在深入API并尝试编写自定义块之前检查是否有一个简单的解决方案。此外,将错误和完成传播到管道末端也很重要
谢谢你的回答 不需要自定义块。你要找的是那个。下面是一个简单的演示:
public async Task TransformManyExample() {
var data = Enumerable.Range(0, 10).ToList();
var block1 = new TransformManyBlock<IEnumerable<int>, int>(x => x);
var block2 = new ActionBlock<int>(x => Console.WriteLine(x.ToString()));
block1.LinkTo(block2, new DataflowLinkOptions() { PropagateCompletion = true });
block1.Post(data);
block1.Complete();
await block2.Completion;
}
public异步任务TransformManyExample(){
var data=Enumerable.Range(0,10).ToList();
var block1=新的TransformManyBlock(x=>x);
var block2=newactionblock(x=>Console.WriteLine(x.ToString());
block1.LinkTo(block2,新的DataflowLinkOptions(){PropagateCompletion=true});
区块1.邮政(数据);
block1.Complete();
等待区块2.完成;
}
还有一些,可能是被骗。谢谢,这正是我需要的!接下来,是否有一个块模式允许您从TransformMany
开始,然后通过生成的“多”项的结果进行聚合?