假设我有一个简单的ActionBlock<int>

var actionBlock = new ActionBlock<int>(_ => Console.WriteLine(_));

我可以指定一个有限的容量来启用缓冲:
var actionBlock = new ActionBlock<int>(
    _ => Console.WriteLine(_),
    new ExecutionDataflowBlockOptions
    {
        BoundedCapacity = 1000
    });

创建BufferBlock<T>并将其链接到actionBlock更好,还是一样,还是多余?

最佳答案

如果仅在ActionBlock之前添加了有界的BufferBlock,则该操作将无法正常工作,因为ActionBlock仍然是无界的。因此,项目将继续堆积在ActionBlock的输入队列中,什么也做不了。

如果您添加了有界的BufferBlock并将ActionBlock的BoundedCapacity设置为1,那么它将起作用(加上负1)。

这样做并不会给您太多(除了增加一些小的开销),因此一般而言,您应该只设置ActionBlock的BoundedCapacity。但是在某些情况下,有界的BufferBlock和绑定(bind)为1的ActionBlock的组合可能是有意义的。例如,当您只想在创建ActionBlock之后设置容量时。

关于c# - DataflowBlockOptions.BoundedCapacity和BufferBlock <T>之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20887659/

10-11 19:26