TPL数据流批处理块重复元素

时间:2015-09-24 13:52:14

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

我的DataFlow管道以BatchBlock开头,有几个任务将项目发布到此BatchBlock。现在,BatchBlockTriggerBatch()方法的帮助下,根据计时器将数据传播到下一个块。

在这种情况下,您可以假设在创建BatchBlock期间没有批次具有(非常高)批量大小,即每个触发的批次可能具有不同的大小。

在触发BatchBlock之前,我想删除批处理中存在的所有重复项目,这些项目即将传播到管道中的下一个块。我有办法做到吗?

1 个答案:

答案 0 :(得分:1)

您无法添加或删除存储在块内的项目。

但是,您可以在TransformBlock之后添加BatchBlock,以删除当前批次的重复项并向前移动批次。请记住,这意味着您的批次可能会更小。

假设正确实现了相等成员,它可以如下所示:

var transformBlock = new TransformBlock<int[], IEnumerable<int>>(_ => new HashSet<int>(_));