c# - 接收集合并为每个元素调用其链接 block 的 TPL 数据流

标签 c# task-parallel-library dataflow tpl-dataflow

对不起,如果已经有类似的问题,我找不到了。

我有以下情况:

  1. 我必须对图像进行一些处理,而 TPL 数据流适合 在这里很好,因为它让我可以轻松地完成我的不同部分 并行工作流和逻辑单元中的独立代码
  2. 有一个我无法控制的函数返回一个列表 图片。它用作我的网格(或管道,更 精确)
  3. 我在 Dataflow 网格中的所有其他节点都使用单个图像,因此我在第二个项目符号中提到的节点之后的节点期望获得一个图像(这对于并行性原因很重要)

是否有一个 block (或其他一些解决方案)我可以使用它来接受类型为 IEnumerable<T> 的输入?或类似的东西并转发那个 IEnumerable 的每个元素到一个期望收到 T 的区 block ?

我不想重新发明轮子,所以我想在深入研究 API 并尝试编写自定义 block 之前检查是否有简单的解决方案。此外,将错误和完成传播到管道末端也很重要。

感谢您的回答!

最佳答案

不需要自定义 block 。您正在寻找 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;
}

关于c# - 接收集合并为每个元素调用其链接 block 的 TPL 数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442298/

相关文章:

c# - 使用 SendKeys 发送 Windows key

c# - FromCurrentSynchronizationContext,我错过了什么吗?

c# - Parallel.Invoke 不等待异步方法完成

javascript - 获取层次结构的级别

c# - 与继续使用 .NET Remoting 相比,将我们的应用程序迁移到 WCF 有什么好处?

c# - 在线程应用程序中准确计时一行代码,C#

C# HttpClient 和 Windows 身份验证 : Cannot access a closed Stream

c# - 多个操作的并行化和结果的连接

code-analysis - 支持 "Incremental computing"的编程工具链(甚至可能是 C/C++)

stream - 数据流处理