有界容量的贪婪和非贪婪数据流块之间的区别

9
我有一个定义了BoundedCapacityBatchBlock
var _batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions
                                      {BoundedCapacity = 100 });

因此,如果队列容量达到100,则阻塞程序会推迟接收到的每个消息,直到有可用的位置。在这种情况下,批处理队列被认为是贪婪或非贪婪的?

1个回答

10
该区块是贪婪的,但并非因为它如何处理100个以上的项目,而是2个以下的项目。您可以将贪婪值设置为false(默认为true),然后该区块只会在有足够的项目发送批次时实际消耗这些项目,否则它们将被推迟:
var batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions
{
    Greedy = false,
    BoundedCapacity = 100.
});

BatchBlock类可以在贪婪模式和非贪婪模式下运行。在贪婪模式下(默认情况下),BatchBlock对象接受所有提供的消息,并在接收到指定数量的元素后传播出一个数组。在非贪婪模式下,BatchBlock对象推迟所有传入的消息,直到足够多的源提供了消息以形成一批。

来自Dataflow(任务并行库)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接