是否可以让任何数据流块类型作为单个输入的结果发送多个中间结果?

Is it possible to have any dataflow block type send multiple intermediate results as a result of a single input?

是否可以让 TransformManyBlock 将创建的中间结果发送到下一步,而不是等待整个 IEnumerable<T> 被填充?

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

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

用例是在读取文件块时对其进行处理。在我的例子中,在我可以处理任何东西之前需要这么多行的模数,所以直接流将不起作用。

我想出的办法是创建两条管道:

  1. a "processing" 数据流网络处理可用的数据块

  2. "producer" 数据流网络结束于文件被分解的地方 然后将块发布到实际转换数据的 "processing" 网络的开头。

"producer" 网络需要使用 "processing" 网络的起点作为种子。

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

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

您可能需要使用 iterator. This way an item will be propagated downstream after every yield command. The only problem is that yielding from lambda functions is not supported in C#, so you'll have to use a local function 来创建您的 IEnumerable。示例:

var block = new TransformManyBlock<string, string>(filePath => ReadLines(filePath));

IEnumerable<string> ReadLines(string filePath)
{
    string[] lines = File.ReadAllLines(filePath);
    foreach (var line in lines)
    {
        yield return line; // Immediately offered to any linked block
    }
}