我们假设我有一个简单的ActionBlock<int>
var actionBlock = new ActionBlock<int>(_ => Console.WriteLine(_));
我可以指定一个有限容量来启用缓冲:
var actionBlock = new ActionBlock<int>(
_ => Console.WriteLine(_),
new ExecutionDataflowBlockOptions
{
BoundedCapacity = 1000
});
最好是创建一个BufferBlock<T>
并将其链接到actionBlock,它是否相同,或者它是多余的?
答案 0 :(得分:10)
如果您刚刚在ActionBlock之前添加了有界BufferBlock,那么这将无法正常工作,因为ActionBlock仍然是无限制的。因此,项目将不断累积在ActionBlock的输入队列中,什么都不做。
如果添加了有界BufferBlock并将ActionBlock的BoundedCapacity设置为1,则可以使用(加减1)。
这样做并不会给你太多(除了增加一些小的开销),所以一般来说,你应该只设置ActionBlock的BoundedCapacity。但是在某些情况下,有界BufferBlock和ActionBlock绑定到1的组合可能有意义。例如,当您只想在创建ActionBlock之后设置容量。