ActionBlockT

(的 foreach)

可以將此類邏輯地視為要處理的資料的緩衝區,以及用於處理該資料的任務,其中資料流塊管理這兩者。在最基本的用法中,我們可以例項化一個 ActionBlock 並向其釋出資料; ActionBlock 構造中提供的委託將針對釋出的每個資料非同步執行。

StackOverflow 文件

同步計算

var ab = new ActionBlock<TInput>(i => 
{
    Compute(i);
});
…
ab.Post(1);
ab.Post(2);
ab.Post(3);

將非同步下載限制為最多 5 個

var downloader = new ActionBlock<string>(async url =>
{
    byte [] imageData = await DownloadAsync(url);
    Process(imageData);
}, new DataflowBlockOptions { MaxDegreeOfParallelism = 5 }); 

downloader.Post("http://website.com/path/to/images");
downloader.Post("http://another-website.com/path/to/images");

Stephen Toub 介紹 TPL 資料流