我们说我有一个有限容量为2的BufferBlock
并且我将它(使用LinkTo()
)与MaxDegreeOfParallelism = 2的ActionBlock链接起来。现在,我知道我会立即能够将2个项目发送到缓冲区,ActionBlock将立即开始处理它们。但是,让我们说这些行动需要几秒钟才能完成。我将能够再向缓冲区发送2个项目,而第一个项目正在运行,或者只是在消耗它的操作完成后才从缓冲区中删除项目?
答案 0 :(得分:1)
如果您的ActionBlock
具有未绑定的容量,BufferBlock
的有限容量将无关紧要,ActionBlock
将缓冲您的所有商品,直到内存不足为止。但是,如果您已将BoundedCapcity
上的ActionBlock
设置为2以及将MaxDegreeParallelism
设置为2,那么它将处理两条消息并在其中保留2条消息' s缓冲区。然后你的缓冲区块将缓冲2个额外的消息。任何其他消息都需要等待管道中的容量。等待空间释放的最佳方法是使用await myPipeline.SendAsync(data)
。总的来说,整个管道的容量为6。