接收集合并为每个元素调用其链接块的 TPL 数据流
TPL dataflow that receives a collection and calls its linked block for each element
对不起,如果已经有类似的问题,我找不到了。
我有以下情况:
- 我必须对图像进行一些处理,而 TPL 数据流适合
在这里很好,因为它让我可以轻松地完成我的不同部分
并行工作流和逻辑单元中的独立代码
- 有一个我无法控制的功能returns列表
图片。它用作我的网格(或管道,更
精确)
- 我在 Dataflow 网格中的所有其他节点都使用单个图像,因此我在第二个项目符号中提到的 I 之后的节点期望获得一个图像(这对于并行性原因很重要)
有没有我可以使用的块(或其他解决方案),它将接受类型 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;
}
对不起,如果已经有类似的问题,我找不到了。
我有以下情况:
- 我必须对图像进行一些处理,而 TPL 数据流适合 在这里很好,因为它让我可以轻松地完成我的不同部分 并行工作流和逻辑单元中的独立代码
- 有一个我无法控制的功能returns列表 图片。它用作我的网格(或管道,更 精确)
- 我在 Dataflow 网格中的所有其他节点都使用单个图像,因此我在第二个项目符号中提到的 I 之后的节点期望获得一个图像(这对于并行性原因很重要)
有没有我可以使用的块(或其他解决方案),它将接受类型 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;
}