TPL DataFlow调用数据流两次

时间:2017-04-19 14:09:12

标签: c# task-parallel-library tpl-dataflow

我设计了一个由各种DataBlock组成的复杂数据流。我将数据包发送到流程中并在结束时收到结果。

我使用

input.Post();
input.Complete();

// and later with
ReceiveAsync();

对于第一个调用,一切正常,但我不知道如何将第二个数据包发送到流程图中。

在图表中我还必须使用WriteOnceBlock,这可能是两次调用流程的问题吗?

1 个答案:

答案 0 :(得分:1)

在为TPL Dataflow方法调用Complete方法后,或者通过完成传播链接到Complete方法时,您无法使用任何linking the blocks块。因此,您需要为每个呼叫重新创建管道,或者(首选)不要仅为一个呼叫呼叫completion propagation for this

对您的设计的建议:

  • 您的管道中似乎正在使用Post/Receive方法获取数据,这可以由WriteOnceBlock替代。此外,您可以使用Broadcast,因此您将删除代码中的所有延续处理程序(如果有)。
  • 您确定需要WriteOnceBlock吗?您可以将其切换为MaxMessages for linked blocks,因此您仍然拥有数据值,但下次调用时可以覆盖它。
  • 如果这仍然不是一个选项,您可以通过指定LinkTo method或存储WriteOnceBlockIDisposable结果取消关联array,以便您可以删除它将用于您的下一个电话,并创建一个新电话object