抱歉,如果已经有类似的问题,我找不到。
我有以下情况:
我必须对图像进行一些处理,TPL Dataflow适合
很好,因为它使我可以轻松地完成我的不同部分
并行工作流和逻辑单元中的独立代码
有一个我无法控制的功能返回了一个列表
图片。它被用作我的网格物体(或管道)中的第二个节点
精确)
我在Dataflow网格中的所有其他节点都使用一个图像,因此第二个项目符号中提到的第一个节点之后的节点希望获得一个图像(这对于并行性而言很重要)
我是否可以使用一个块(或其他解决方案)来接受类型为IEnumerable<T>
或类似内容的输入,并将该IEnumerable
的每个元素转发到希望接收T
的块?
我不想重新发明轮子,所以我想在探究API并尝试编写自定义块之前检查是否有一个简单的解决方案。同样,将错误和完成传播到流水线的末尾也很重要。
感谢您的回答!
最佳答案
无需自定义块。您正在寻找TransformManyBlock
。这是一个简单的演示:
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;
}