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
});