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
只能写入一次,但它实际上不应该出现在主管道中,它可能出现在分支上,但也只能写入一段数据。