2

这是一个关于TPL Dataflow ProducerConsumer Pattern的新问题,Svick 已经回答了这个问题。

  1. 我需要并行处理4个2gb的文件,需要逐个缓冲区读取文件内容缓冲区。(这里使用生产者模式。Maxdegreeofparallelism = 4,我可以一次发布 4 个缓冲区)
  2. 需要处理缓冲区并写入中间表。(这里使用消费者模式。)
  3. 内存中的数据表将根据业务规则进行转换并写入规范化表。
  4. 内存中的数据再次被重新用于对最终版本的数据进行更多验证。

目前,第 3 步和第 4 步未使用任何块。它通过来自消费者的顺序函数调用。

  1. 这个设计正确吗?
  2. 除了使用生产者消费者方法之外,有没有办法将 4 个块逐个流水线并并行处理所有这些块?你能帮我一个小示例代码吗?
4

1 回答 1

0

你的设计似乎是正确的,但很难从像这样的简短描述中说出来。

如果你想在 TDF 中创建管道,通常的方法是使用一些IPropagatorBlock,最有可能TransformBlock的 .

TransformBlock如果您为块的每个输入生成单个输出,则可以工作。但在您的情况下似乎并非如此,因此您可能想要使用TransformManyBlock,它可以为每个输入(包括 0 或 1)产生任意数量的输出。

另一种选择是在创建输出时直接Post()(或)到以下块。await SendAsync()

于 2013-01-29T13:44:45.827 回答