关于异步等待:C# TPL 数据流能否向上游传播完成?

Can a C# TPL dataflow propagate completion upstream?

链接数据流块时,您可以选择"传播完成"设置。这实质上是将完成从源传播到目标。

但是,我有一个应用程序,从数据库中提取数据并且下游块正在监视某些条件是否为真。当达到这个条件时,我想杀死数据流。本质上,我希望我的下游块向上游传播完成。

我将如何使用 TPL 数据流来做到这一点?


杀死数据流的最安全和直接的方法是将取消令牌传递给所有块,然后取消令牌。它比调用 Complete() 到生产者块,然后等待最后的项目被处理更直接。

1
2
3
4
5
6
7
8
9
10
var cts = new CancellationTokenSource();

var producer = new BufferBlock<X>(new DataflowBlockOptions()
{
    CancellationToken = cts.Token
});

// ...

cts.Cancel();