TPL数据流设计,用于异步流水线化4个块

时间:2013-01-29 12:47:40

标签: .net task-parallel-library tpl-dataflow

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

  1. 我需要并行处理4个2gb的文件,需要通过缓冲区读取文件内容缓冲区。 (这里使用了生产者模式。使用Maxdegreeofparallelism = 4,我一次可以发布4个缓冲区)
  2. 需要处理缓冲区并写入中间表。 (此处使用消费者模式。)
  3. 内存数据表将根据业务规则进行转换,并写入规范化表格。
  4. 内存数据再次被重复用于最终版本数据的更多验证。
  5. 目前,第3步和第4步没有使用任何块。它通过消费者的顺序函数调用。

    1. 这个设计是否正确?
    2. 除了使用生产者消费者方法之外,有没有办法逐个管理4个块并处理parallal中的所有块?你能帮我一个小样本代码吗?

1 个答案:

答案 0 :(得分:0)

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

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

如果为块的每个输入生成单个输出,则

TransformBlock有效。但在你的情况下似乎不会是这样,所以你可能想要使用TransformManyBlock,它可以为每个输入产生任意数量的输出(包括0或1)。

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