C# DataflowBlockOptions.BoundedCapacity和BufferBlock之间的差异<;T>;

C# DataflowBlockOptions.BoundedCapacity和BufferBlock之间的差异<;T>;,c#,.net,task-parallel-library,tpl-dataflow,C#,.net,Task Parallel Library,Tpl Dataflow,假设我有一个简单的ActionBlock var actionBlock=newactionblock(=>Console.WriteLine()); 我可以指定一个有界容量来启用缓冲: var actionBlock = new ActionBlock<int>( _ => Console.WriteLine(_), new ExecutionDataflowBlockOptions { BoundedCapacity = 1000

假设我有一个简单的
ActionBlock

var actionBlock=newactionblock(=>Console.WriteLine());
我可以指定一个有界容量来启用缓冲:

var actionBlock = new ActionBlock<int>(
    _ => Console.WriteLine(_),
    new ExecutionDataflowBlockOptions
    { 
        BoundedCapacity = 1000
    });
var actionBlock=新actionBlock(
_=>控制台写入线(389;),
新的ExecutionDataflowBlockOptions
{ 
边界容量=1000
});

创建一个
BufferBlock
并将其链接到actionBlock,是相同的,还是冗余的?

如果您只是在actionBlock之前添加了有界缓冲块,那么这将无法正常工作,因为actionBlock仍然是无界的。因此,项目将在ActionBlock的输入队列中不断累积,而一无所获

如果添加了bounded BufferBlock,并将ActionBlock的BoundedCapacity设置为1,则该设置将起作用(正负1)


这样做不会给您带来太多(除了增加一些小的开销),所以一般来说,您应该只设置ActionBlock的BoundedCapacity。但在某些情况下,有界缓冲块和有界于1的ActionBlock的组合可能是有意义的。例如,当您只想在创建ActionBlock之后设置容量时。

我也想知道这一点。我猜它的预期用途是当您需要在流中的分支处进行缓冲时。。冗余的
var actionBlock = new ActionBlock<int>(
    _ => Console.WriteLine(_),
    new ExecutionDataflowBlockOptions
    { 
        BoundedCapacity = 1000
    });