【问题标题】:TPL Dataflow Batchblock Duplicate elementsTPL 数据流批处理块重复元素
【发布时间】:2015-12-22 03:55:24
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    假设平等成员被正确实现,它可能如下所示:

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

    【讨论】:

    • 感谢您的回答,读完后我觉得自己很愚蠢,为什么我想不起来:) 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多