Complete 是否为 DataFlow 块执行触发器?

Does Complete execute Trigger for DataFlow blocks?

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

例如,如果 Batch 块一次批处理 250 个项目,将 251 个项目提供给管道,然后调用 Complete,剩下的一个项目是否会由整个管道处理?如果没有,我假设我将需要实现自己的标志和逻辑以确保所有剩余项目以及第二个项目都通过管道传递?

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

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