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

2023-12-10

是否可以得到TransformManyBlocks 在创建中间结果时将其发送到下一步,而不是等待整个结果IEnumerable<T>被填满?

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

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

用例是在读取文件时处理文件块。就我而言,在我可以处理任何内容之前需要很多行的模数,因此直接流不起作用。

我想出的他们的办法是创建两个管道:

  1. “处理”数据流网络在可用时处理数据块

  2. “生产者”数据流网络,在文件被分解的地方结束 然后将块发布到实际转换数据的“处理”网络的开头。

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

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

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


您可能需要创建您的IEnumerable通过使用iterator。这样,一个项目将在每次之后向下游传播yield命令。唯一的问题是从 lambda 函数中产生不支持在 C# 中,所以你必须使用局部功能反而。例子:

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
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐