TPL Dataflow SendAsync结果

时间:2017-08-17 17:50:24

标签: c# .net tpl-dataflow

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

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

1 个答案:

答案 0 :(得分:0)

  

我了解要将数据放入TPL数据流目标,我可以使用PostSendAsync

正确

  

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

不正确 - 其方法都立即返回。如果您正在使用Post,它也会返回false

  

我知道SendAsync会等待更长时间才能尝试将其放入

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

  

但我不确定SendAsync返回false的含义是什么。

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

  

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

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

  

以后它可能会开始接受消息吗?

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