TPL Dataflow Batchblock 重复元素

3
我的DataFlow管道以一个BatchBlock开始,有多个任务将项发布到这个BatchBlock 中。现在,这个BatchBlock依靠定时器和TriggerBatch()方法的帮助将数据传播到下一个块。

在这种情况下,您可以假设创建BatchBlock时提供的批处理大小都不是(非常高的)批处理大小,即每个触发的批处理可能具有不同的大小。

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

1个回答

4

您不能添加或删除存储在块内的项目。

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

假设相等成员已经正确实现,代码如下:

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

谢谢你的回答,看完之后我觉得自己很蠢,为什么没想到呢 :) 非常感谢! - undefined

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