BatchedJoinBlockT1 T2 ......

(從 2-3 個輸入中收集一定數量的總專案,並將它們分組為資料項集合的元組)

BatchedJoinBlock <T1,T2,…>在某種意義上是 BatchBlock 和 JoinBlock <T1,T2,…>的組合。
而 JoinBlock <T1,T2,…>用於將每個目標的一個輸入聚合成一個元組,而 BatchBlock 用於將 N 個輸入聚合到一個集合中,BatchedJoinBlock <T1,T2,…>用於收集來自兩個的 N 個輸入所有目標都進入了集合的元組。

StackOverflow 文件

分散/集中

考慮一個分散/聚集問題,其中 N 個操作被啟動,其中一些可能成功併產生字串輸出,而其他操作可能會失敗併產生異常。

var batchedJoin = new BatchedJoinBlock<string, Exception>(10);

for (int i=0; i<10; i++)
{
    Task.Factory.StartNew(() => {
        try { batchedJoin.Target1.Post(DoWork()); }
        catch(Exception ex) { batchJoin.Target2.Post(ex); }
    });
}

var results = await batchedJoin.ReceiveAsync();

foreach(string s in results.Item1) 
{
    Console.WriteLine(s);
}

foreach(Exception e in results.Item2) 
{
    Console.WriteLine(e);
}

Stephen Toub 介紹 TPL 資料流