2

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

4

1 回答 1

2

如果您ActionBlock的容量有限,那么您的有限容量BufferBlock将无关紧要,ActionBlock它将缓冲您的所有项目,直到您的内存不足。但是,如果您将BoundedCapcityon your设置ActionBlock为 2 和MaxDegreeParallelism2,它将处理两条消息并在其缓冲区中保存 2 条消息。然后您的缓冲区块将缓冲 2 条附加消息。任何其他消息都需要等待管道中的容量。等待空间释放的最佳方法是使用await myPipeline.SendAsync(data). 整个管道总共有 6 个容量。

于 2017-04-26T15:28:06.843 回答