TransformBlockTInput TOutput

(选择,一对一)

与 ActionBlock 一样,TransformBlock <TInput,TOutput>允许执行委托以对每个输入数据执行某些操作; **与 ActionBlock 不同,此处理具有输出。**该委托可以是 Func <TInput,TOutput>,在这种情况下,当委托返回时,该元素的处理被认为已完成,或者它可以是 Func <TInput,Task>,在这种情况下,该元素的处理被认为已完成当委托返回但返回的任务完成时。对于那些熟悉 LINQ 的人来说,它有点类似于 Select(),因为它接受输入,以某种方式转换输入,然后产生输出。

默认情况下,TransformBlock <TInput,TOutput>按顺序处理其数据,MaxDegreeOfParallelism 等于 1.除了接收缓冲输入并对其进行处理之外,此块还将采用其所有已处理的输出和缓冲区(数据尚未处理)已处理的数据和已处理的数据)。

它有两个任务:一个用于处理数据,一个用于将数据推送到下一个块。

StackOverflow 文档

并行管道

var compressor = new TransformBlock<byte[], byte[]>(input => Compress(input));
var encryptor = new TransformBlock<byte[], byte[]>(input => Encrypt(input));

compressor.LinkTo(Encryptor); 

Stephen Toub 介绍 TPL 数据流