我知道将数据放入TPL Dataflow目标中可以使用PostSendAsync,如果可以将项目放入目标中,则将立即返回。我知道SendAsync将等待更长的时间才能尝试放入,但是我不确定SendAsync返回false的含义是什么。

返回SendAsyncfalse是否表示目标(特别是BufferBlock)已完成并且将永远不接受更多消息?
以后是否有可能开始接受消息?

最佳答案

我了解将数据放入TPL Dataflow目标中可以使用PostSendAsync


正确


  如果可以将物品放入目标,它将立即返回。


不正确-两者的方法都会立即返回。如果您使用的是Post,它也会返回false


  我了解SendAsync将等待更长的时间尝试放入


部分正确。 SendAsync将设置状态机,最终将返回结果。


  但是我不确定SendAsync返回false是什么意思。


这意味着目标块当时无法接受该消息。


  返回SendAsyncfalse是否表示目标(特别是BufferBlock)已完成并且将永远不接受更多消息?


这样做的原因有很多,不仅该目标处于完成状态。例如,它自己的缓冲区可能充满了消息,而另一个缓冲区不适合它(如果您的块受BoundedCapacity约束)。因此,您不能肯定地说方法返回false的原因是完成状态。但是,如果不限制缓冲区的容量,则可能是这样。


  以后是否有可能开始接受消息?


不,块的设计方式只能完成一次。您需要重新创建一个块并将其插入管道中以重新启动它。

09-12 18:41