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 資料流