DataflowBlockOptions.BoundedCapacity和BufferBlock <T>之间的区别

i3a*_*non 11 .net c# task-parallel-library tpl-dataflow

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

var actionBlock = new ActionBlock<int>(_ => Console.WriteLine(_));
Run Code Online (Sandbox Code Playgroud)

我可以指定一个有限的容量来启用缓冲:

var actionBlock = new ActionBlock<int>(
    _ => Console.WriteLine(_),
    new ExecutionDataflowBlockOptions
    { 
        BoundedCapacity = 1000
    });
Run Code Online (Sandbox Code Playgroud)

创建一个BufferBlock<T>并将其链接到actionBlock更好,它是相同的,还是多余的?

svi*_*ick 10

如果您刚刚在ActionBlock之前添加了有界BufferBlock,那么这将无法正常工作,因为ActionBlock仍然是无限制的.因此,项目将继续累积在ActionBlock的输入队列中,什么都不做.

如果添加了有界BufferBlock并将ActionBlock的BoundedCapacity设置为1,则可以使用(加减1).

这样做并没有给你太多(除了增加一些小的开销),所以一般来说,你应该只设置ActionBlock的BoundedCapacity.但是在某些情况下,有界BufferBlock和ActionBlock绑定到1的组合可能有意义.例如,当您只想在创建ActionBlock之后设置容量.