假设我有一个简单的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/