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);
}