我的数据流管道从BatchBlock
开始,几个任务将项目发布到这个BatchBlock
中。现在,这个BatchBlock
在TriggerBatch()
方法的帮助下根据Timer将数据传播到下一个块。
在这种情况下,您可以假设所有批都不是在创建BatchBlock
期间提供的(非常高的)批大小,即每个触发的批可以具有不同的大小。
在触发BatchBlock
之前,我想删除即将传播到管道中的下一个块的批处理中存在的所有重复项。我能做到吗?
您不能添加或删除存储在块中的项。
但是,您可以在BatchBlock
之后添加TransformBlock
,以删除当前批处理的重复项并向前移动批处理。请记住,这意味着你的批次可能会更小。
假设相等成员被正确实现,它看起来像这样:
var transformBlock = new TransformBlock<int[], IEnumerable<int>>(_ => new HashSet<int>(_));