是否可能使任何数据流块类型都由于单个输入而发送多个中间结果?

问题描述 投票:0回答:1

是否可以在创建中间结果时让TransformManyBlock发送中间结果,而不是等待整个IEnumerable<T>被填充?

我完成的所有测试均显示TransformManyBlock仅在完成时将结果发送到下一个块;然后下一个块一次读取这些项目。

似乎是基本功能,但我在任何地方都找不到任何示例。

用例是在读取文件时对其进行处理。以我为例,在我处理任何东西之前,需要很多行的模数,因此直接流将无法工作。

我想出来的是创建两个管道:

  1. 一个“正在处理”的数据流网络将在可用时处理大块数据

  2. “ producer”数据流网络,该网络在文件被分割成的地方结束然后将大块数据发布到实际处理数据的“处理”网络的开始。

“生产者”网络需要以“处理”网络的起点作为种子。

这不是一个好的长期解决方案,因为将需要其他处理选项,而且它也不灵活。

是否有可能使用任何数据流块类型来将创建的多个中间结果发送到单个输入?任何指向工作代码的指针吗?

c# parallel-processing dataflow tpl-dataflow
1个回答
0
投票

您可能需要使用IEnumerable创建iterator。这样,每执行一次yield命令,一项就会在下游传播。唯一的问题是从C#中的lambda函数yield产生,因此您必须改为使用is not supported。示例:

local function
© www.soinside.com 2019 - 2024. All rights reserved.