Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入缓冲区中元素的TPL数据流批处理块检查_C#_.net_Task Parallel Library_Tpl Dataflow - Fatal编程技术网

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上问这个问题,所以有一点可能是一个发人深省的问题,可能/可能不是直截了当的。如果你能用你的知识来回答这个问题,而不是用一种不同的方式来构建它,那就太好了!