c# - 完成 TPL 数据流链

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

给定这段代码:

s_Batch = new BatchBlock<PerformanceRecord>(500);
s_Action = new ActionBlock<PerformanceRecord[]>(a => SendToDatabase(a));
s_Batch.LinkTo(s_Action);

完成后是否需要在每个 block 上调用 Complete()?还是完成 s_Batch 会触发链接到它的 block 中的完成?

最佳答案

就目前的代码而言,您需要分别对所有 block 调用 Complete:

s_Batch.Complete();
await s_Batch.Completion;

s_Action.Complete();
await s_Action.Completion;

但是,您可以在链接 block 以请求完成传播时使用 DataflowLinkOptions:

s_Batch.LinkTo(s_Action, new DataflowLinkOptions {PropagateCompletion = true});
s_Batch.Complete();
await s_Batch.Completion;

这会将完成和错误通知传播到链接的目标 block (即 s_Action)。

关于c# - 完成 TPL 数据流链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795126/

相关文章:

c# - Task.WhenAny 取消未完成的任务和超时

c# - 使用for循环添加任务用于创建限制并发的任务调度程序

c# - 为什么我的 C# Singleton 不工作?

c# - 安装完软件后如何安装USB驱动

c# - 计算二进制文件中字节模式的出现次数

c# - 有哪些 ORB 算法实现可用?

c# - 两分支数据流网络不完整

c# - 解析自定义日期时间

c# - 在 C# 中,测试数据集是否为空的最佳方法是什么?

.net - 如何使用 Entity Framework 6 将 `time(0)` 映射到 `DateTime`