2015-10-01 31 views
0

我的DataFlow流水线以BatchBlock开头。我想在TriggerBatch()方法的帮助下触发BatchBlock。我的批量大小可能是可变的,所以在创建Batchblock时,我放置了一个相当高的BatchSize,这并不是我所期望的。TPL Dataflow批量块检查输入缓冲区中的元素

现在我想要调用TriggerBatch()方法,这取决于BatchBlock是否确实有一些元素可以实际触发成批。有没有办法检查Batchblock的内部缓冲区是否非空?如果不是的话,有人可以为我提出一个相同的解决方案。 BatchBlock正在从多个线程供给Post()数据到Batchblock。不过,我希望有一种机制可以在触发之前等到Batchblock中存在元素。基本上我不希望我的TriggerBatch()没有结果。不幸的是,使用计时器不适合我。

在这一点上,我确实需要第三人意见,因为我一直坚持这一段时间了。

+0

* *什么是所需的行为?何时以及为什么要触发该批次?创建自定义块并不难,事实上,您可能可以调整[MSDN关于创建自定义块的文章]中的第一个滑动窗口示例(https://msdn.microsoft.com/zh-cn/library/hh228606 (v = vs.110).aspx),但你需要决定触发条件是什么 –

+0

为什么使用定时器不是一个选项? – RePierre

+0

@PanagiotisKanavos期望的行为有点像这个问题http://stackoverflow.com/questions/32717337/data-propagation-in-tpl-dataflow-pipeline-with-batchblock-triggerbatch。我确实考虑过一个自定义块,但对于我来说,构想也变得相当困难。我已经浏览了您所概述的MSDN,但不知何故无法将我的要求与它联系起来。我能想到的唯一方法是在转换块的帮助下(保存在该批处理块之前)保留一个输入列表,并在每次Batchblock上的Triggerbatch() – Ricky

回答