C# 输入缓冲区中元素的TPL数据流批处理块检查
我的数据流管道以C# 输入缓冲区中元素的TPL数据流批处理块检查,c#,.net,task-parallel-library,tpl-dataflow,C#,.net,Task Parallel Library,Tpl Dataflow,我的数据流管道以批处理块开始。我想在TriggerBatch()方法的帮助下触发BatchBlock。我的批处理大小可以是可变的,因此在创建Batchblock时,我放置了一个相当高的BatchSize,我并不期望达到这个值 现在我想调用TriggerBatch()方法,这取决于BatchBlock中是否确实包含一些实际上可以触发到批中的元素。是否有办法检查Batchblock的内部缓冲区是否为非空?如果没有,请有人向我提出解决方案。BatchBlock正从多个线程馈送,这些线程将Post()数
批处理块开始。我想在TriggerBatch()
方法的帮助下触发BatchBlock
。我的批处理大小可以是可变的,因此在创建Batchblock
时,我放置了一个相当高的BatchSize
,我并不期望达到这个值
现在我想调用TriggerBatch()
方法,这取决于BatchBlock
中是否确实包含一些实际上可以触发到批中的元素。是否有办法检查Batchblock
的内部缓冲区是否为非空?如果没有,请有人向我提出解决方案。BatchBlock
正从多个线程馈送,这些线程将Post()
数据馈送到BatchBlock
。然而,我想要一种机制,它可以等到Batchblock
中存在元素后再触发它。基本上,我不希望我的TriggerBatch()
没有结果。不幸的是,使用计时器不是我的选择
在这一点上,我确实需要第三方的意见,因为我已经在这方面停留了很长时间。使用DataflowBlock.enclosure
您可以创建一个自定义块,您可以自己管理输入缓冲区,并可以根据自己的条件推送任何大小的批:期望的行为是什么?何时以及为什么要触发批次?创建自定义块并不难,事实上,您可能可以修改第一个滑动窗口示例,但您需要确定触发条件是什么?为什么不选择使用计时器?@PanagiotisKanavos所需的行为与此问题类似。我确实考虑过自定义块,但这对我来说也变得很难概念化。我已经阅读了您概述的MSDN,但不知何故无法将我的要求与之联系起来。我能想到的唯一方法是在转换块的帮助下维护一个输入列表(放在这个batchblock的前面),每次使用Triggerbatch()@PanagiotisKanavos时清除该列表。您从哪里得到我需要单独缓冲消息的概念?我不!我需要成批的输入,或者换句话说,Batchblock
非常适合的输入数组。在我的两个问题中,我都没有提到我需要单一输入。所以这个问题对我来说是有意义的。@PanagiotisKanavos谢谢你对我问题的回答。既然你现在似乎明白了这个问题,你有没有一个可能的解决办法?另外,我不认为没有答案真的反映了什么,我确实向斯蒂芬·克利里本人问了同样的问题,他建议我在stackoverflow上问这个问题,所以有一点可能是一个发人深省的问题,可能/可能不是直截了当的。如果你能用你的知识来回答这个问题,而不是用一种不同的方式来构建它,那就太好了!