给定这段代码:
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/