定义了boundedcapacity的贪婪和非贪婪数据流块之间的差异

时间:2014-10-16 01:06:42

标签: c# .net task-parallel-library tpl-dataflow

我有一个BatchBlock,其上定义了BoundedCapacity

var _batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions
                                      {BoundedCapacity = 100 });

因此,如果队列容量达到100,则该块会推迟收到的每条消息,直到某个地点可用。 在这种情况下,批处理队列被认为是贪婪还是非贪婪?

1 个答案:

答案 0 :(得分:6)

该块是贪婪的,但不是因为它如何处理100以上的项目,而是因为2以下的项目。您可以将贪婪值设置为falsetrue是默认值)然后当有足够的发送批次时,该块实际上只会消耗项目,直到那时它们被推迟:

var batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions
{
    Greedy = false,
    BoundedCapacity = 100.
});
  

BatchBlock类以贪婪或非贪婪模式运行。在贪婪模式(默认模式)下,BatchBlock对象接受它提供的每条消息,并在收到指定的元素数后传播出一个数组。在非贪婪模式下,BatchBlock对象会推迟所有传入消息,直到有足够的消息来源向块提供消息以形成批处理

来自Dataflow (Task Parallel Library)