BatchedJoinBlockT1 T2 ......
(從 2-3 個輸入中收集一定數量的總專案,並將它們分組為資料項集合的元組)
BatchedJoinBlock <T1,T2,…>在某種意義上是 BatchBlock 和 JoinBlock <T1,T2,…>的組合。
而 JoinBlock <T1,T2,…>用於將每個目標的一個輸入聚合成一個元組,而 BatchBlock 用於將 N 個輸入聚合到一個集合中,BatchedJoinBlock <T1,T2,…>用於收集來自兩個的 N 個輸入所有目標都進入了集合的元組。
分散/集中
考慮一個分散/聚集問題,其中 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);
}