【问题标题】:Does Complete execute Trigger for DataFlow blocks?Complete 是否为 DataFlow 块执行触发器?
【发布时间】:2021-12-21 11:18:12
【问题描述】:

我有两个管道,它们使用 System.Threading.Tasks.Dataflow 命名空间中的多个 Buffer、Batch 和 Action 块。我知道一旦所有工作项都添加到管道中,应该调用 Complete 方法。但是,如果 Batch 块一次处理 250 个项目,将调用 Complete 方法实际调用内部的 Trigger 方法以确保完成任何待处理的项目。

例如,如果 Batch 块一次批处理 250 个项目,则将 251 个项目分配给管道,并调用 Complete,那么剩下的一个项目会被整个管道处理吗?如果没有,我假设我需要实现自己的标志和逻辑,以确保所有剩余的项目都通过管道以及第二个?

【问题讨论】:

    标签: c# multithreading dataflow tpl-dataflow


    【解决方案1】:

    BatchBlock<T>Complete 方法标记为完成时,它会停止接受更多消息,并发出包含当前在其输入队列中的所有剩余消息的最终批次。显然最后一批的大小可以小于指定的batchSize。简而言之,您不必做任何特别的事情。 BatchBlock<T> 自己做正确的事。

    当存储在BatchBlock<T> 的输出队列中的最后一批被下游的链接块接受时,BatchBlock<T>Completion 属性将转换为RanToCompletion 状态。

    【讨论】:

    • 太棒了。我知道它停止接受更多消息,并且我假设它输出了最后一批,我只是想确认它会沿着剩余的管道块传播。感谢您的反馈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多