我知道将数据放入TPL Dataflow目标中可以使用Post
或SendAsync
,如果可以将项目放入目标中,则将立即返回。我知道SendAsync
将等待更长的时间才能尝试放入,但是我不确定SendAsync
返回false
的含义是什么。
返回SendAsync
的false
是否表示目标(特别是BufferBlock
)已完成并且将永远不接受更多消息?
以后是否有可能开始接受消息?
最佳答案
我了解将数据放入TPL Dataflow目标中可以使用Post
或SendAsync
正确
如果可以将物品放入目标,它将立即返回。
不正确-两者的方法都会立即返回。如果您使用的是Post
,它也会返回false
。
我了解SendAsync
将等待更长的时间尝试放入
部分正确。 SendAsync
将设置状态机,最终将返回结果。
但是我不确定SendAsync
返回false
是什么意思。
这意味着目标块当时无法接受该消息。
返回SendAsync
的false
是否表示目标(特别是BufferBlock
)已完成并且将永远不接受更多消息?
这样做的原因有很多,不仅该目标处于完成状态。例如,它自己的缓冲区可能充满了消息,而另一个缓冲区不适合它(如果您的块受BoundedCapacity
约束)。因此,您不能肯定地说方法返回false
的原因是完成状态。但是,如果不限制缓冲区的容量,则可能是这样。
以后是否有可能开始接受消息?
不,块的设计方式只能完成一次。您需要重新创建一个块并将其插入管道中以重新启动它。