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