假设我有BufferBlock
一个有限容量为 2 的 a,我将它链接(使用LinkTo()
)一个具有 MaxDegreeOfParallelism = 2 的 ActionBlock。现在,我知道我将能够立即将 2 个项目发送到缓冲区,并且 ActionBlock 将立即开始处理它们. 但是,假设这些操作需要几秒钟才能完成。当第一个操作正在运行时,我是否能够再向缓冲区发送 2 个项目,或者仅在消耗它的操作完成后才从缓冲区中删除一个项目?
问问题
1119 次
1 回答
2
如果您ActionBlock
的容量有限,那么您的有限容量BufferBlock
将无关紧要,ActionBlock
它将缓冲您的所有项目,直到您的内存不足。但是,如果您将BoundedCapcity
on your设置ActionBlock
为 2 和MaxDegreeParallelism
2,它将处理两条消息并在其缓冲区中保存 2 条消息。然后您的缓冲区块将缓冲 2 条附加消息。任何其他消息都需要等待管道中的容量。等待空间释放的最佳方法是使用await myPipeline.SendAsync(data)
. 整个管道总共有 6 个容量。
于 2017-04-26T15:28:06.843 回答