ActionBlock启动或结束时是否从BufferBlock中删除了项目?

时间:2017-04-26 15:19:55

标签: c# task-parallel-library tpl-dataflow bufferblock

我们说我有一个有限容量为2的BufferBlock并且我将它(使用LinkTo())与MaxDegreeOfParallelism = 2的ActionBlock链接起来。现在,我知道我会立即能够将2个项目发送到缓冲区,ActionBlock将立即开始处理它们。但是,让我们说这些行动需要几秒钟才能完成。我将能够再向缓冲区发送2个项目,而第一个项目正在运行,或者只是在消耗它的操作完成后才从缓冲区中删除项目?

1 个答案:

答案 0 :(得分:1)

如果您的ActionBlock具有未绑定的容量,BufferBlock的有限容量将无关紧要,ActionBlock将缓冲您的所有商品,直到内存不足为止。但是,如果您已将BoundedCapcity上的ActionBlock设置为2以及将MaxDegreeParallelism设置为2,那么它将处理两条消息并在其中保留2条消息' s缓冲区。然后你的缓冲区块将缓冲2个额外的消息。任何其他消息都需要等待管道中的容量。等待空间释放的最佳方法是使用await myPipeline.SendAsync(data)。总的来说,整个管道的容量为6。