完成TPL数据流链

Jon*_*len 1 .net c# task-parallel-library tpl-dataflow

鉴于此代码:

s_Batch = new BatchBlock<PerformanceRecord>(500);
s_Action = new ActionBlock<PerformanceRecord[]>(a => SendToDatabase(a));
s_Batch.LinkTo(s_Action);
Run Code Online (Sandbox Code Playgroud)

当我完成后,我需要打电话Complete()给每个街区吗?或者将完成s_Batch触发链接到它的块中的完整?

i3a*_*non 5

正如您的代码现在所示,您需要Complete单独调用所有块:

s_Batch.Complete();
await s_Batch.Completion;

s_Action.Complete();
await s_Action.Completion;
Run Code Online (Sandbox Code Playgroud)

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

s_Batch.LinkTo(s_Action, new DataflowLinkOptions {PropagateCompletion = true});
s_Batch.Complete();
await s_Batch.Completion;
Run Code Online (Sandbox Code Playgroud)

这会将完成和故障通知传播到链接的目标块(即s_Action).