https://www.cnblogs.com/haoxinyue/archive/2013/03/01/2938959.html
https://docs.microsoft.com/zh-cn/dotnet/standard/parallel-programming/dataflow-task-parallel-library
(一)源和目标
TPL数据流库包括数据流块,它是缓冲并处理数据的数据结构。TPL 定义了三种数据流块:源块、目标块和传播器块。
源块(System.Threading.Tasks.Dataflow.ISourceBlock<TOutput>)作为数据源,可以读取。
目标块(System.Threading.Tasks.Dataflow.ITargetBlock<TInput>)作为数据接收方,可以写入。
传播器块(IPropagatorBlock<TInput,TOutput>)作为源块和目标块,可以读取和写入。
(二)连接块[ISourceBlock<TOutput>.LinkTo()]
可以连接数据流块来形成管道(这是数据流块的线性序列),或网络(这是数据流块的图形)。管道是网络的一种形式。 在管道或网络中,当数据可用时源向目标异步传播数据。 ISourceBlock<TOutput>.LinkTo()方法将源数据流块链接到目标块。 源可以链接到零个或多个目标;目标可以从零个或多个源进行链接。您可以同时向管道或网络中添加或从其移除数据流块。 预定义的数据流块类型处理所有的建立或释放链接的线程安全性。