我设计了一个由各种DataBlock组成的复杂数据流。我将数据包发送到流程中并在结束时收到结果。
我使用
input.Post();
input.Complete();
// and later with
ReceiveAsync();
对于第一个调用,一切正常,但我不知道如何将第二个数据包发送到流程图中。
在图表中我还必须使用WriteOnceBlock
,这可能是两次调用流程的问题吗?
答案 0 :(得分:1)
在为TPL Dataflow
方法调用Complete
方法后,或者通过完成传播链接到Complete
方法时,您无法使用任何linking the blocks块。因此,您需要为每个呼叫重新创建管道,或者(首选)不要仅为一个呼叫呼叫completion propagation for this。
对您的设计的建议:
Post/Receive
方法获取数据,这可以由WriteOnceBlock
替代。此外,您可以使用Broadcast
,因此您将删除代码中的所有延续处理程序(如果有)。WriteOnceBlock
吗?您可以将其切换为MaxMessages
for linked blocks,因此您仍然拥有数据值,但下次调用时可以覆盖它。LinkTo
method或存储WriteOnceBlock
的IDisposable
结果取消关联array,以便您可以删除它将用于您的下一个电话,并创建一个新电话object。