C# TPL数据流调用一个数据流两次

C# TPL数据流调用一个数据流两次,c#,task-parallel-library,tpl-dataflow,C#,Task Parallel Library,Tpl Dataflow,我设计了一个由各种数据块组成的复杂数据流。我将一个数据包发送到流中,最后收到一个结果 我和 input.Post(); input.Complete(); // and later with ReceiveAsync(); 对于第一个调用,一切正常,但我不知道如何将第二个数据包发送到流图中 在图中,我还必须使用一个WriteOnceBlock,调用流两次是否会出现问题?在调用方法后,不能使用任何块,也不能使用完成传播链接到它们的块。因此,您需要为每个调用重新创建管道,或者(这是首选)不要只为

我设计了一个由各种数据块组成的复杂数据流。我将一个数据包发送到流中,最后收到一个结果

我和

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

// and later with
ReceiveAsync();
对于第一个调用,一切正常,但我不知道如何将第二个数据包发送到流图中

在图中,我还必须使用一个
WriteOnceBlock
,调用流两次是否会出现问题?

在调用方法后,不能使用任何块,也不能使用完成传播链接到它们的块。因此,您需要为每个调用重新创建管道,或者(这是首选)不要只为一个调用调用管道

对您的设计的建议:

  • 似乎您正在使用管道中的
    Post/Receive
    方法获取数据,这些方法可以被替换。此外,您可以使用,因此您将删除代码中的所有延续处理程序(如果有的话)
  • 你确定你需要这个吗?您可以将其切换到,这样您仍然有一个数据值,但它可以被下一个调用覆盖
  • 如果这仍然不是一个选项,您可以通过指定或存储的
    IDisposable
    结果来取消链接,以便在下次通话中删除它,并创建一个新的

您应该发布您的流程以供检查。如果没有看到它,我们无法告诉您为什么它不起作用。但一般来说,如果您在流上调用了
Complete
,您将无法通过发送任何进一步的数据。此外,顾名思义,
WriteOnceBlock
只能写入一次,但它实际上不应该出现在主管道中,它可能出现在分支上,但也只能写入一段数据。