给定这段代码:
var loadAll =
Observable.ForkJoin(
service1.FindBooksAsObservable().Select(s => s),
service2.FindBooksAsObservable().Select(s => s),
service3.FindBooksAsObservable().Select(s => s)
);
loadAll.Subscribe(
result =>
{
var aggregatedListOfBooks = result.SelectMany(b => b);
});
如您所见,问题是每个 FindBooksAsObservable() 方法都会返回一个 IObservable<IEnumerable<Book>>
,因此 Subscribe() 中的 result 变量是 IEnumerable<Book>
的数组.
有没有其他方法可以聚合 ForkJoin() 的结果?我希望将类似 Merge() 的东西与 ForkJoin 一起使用。
最佳答案
假设所有三个服务都返回一个Books
列表,您可以使用SelectMany
合并列表:
IObservable<Book> loadAll =
Observable.ForkJoin(
service1.FindBooksAsObservable().Select(s => s),
service2.FindBooksAsObservable().Select(s => s),
service3.FindBooksAsObservable().Select(s => s)
)
.Select(books => books.SelectMany(list => list).ToList());
loadAll.Subscribe(
book => { /* will be called once with a single list of all items */ });
如果您不需要输出列表,您可以删除 ToList()
调用。
关于.net - 在 Rx 中聚合 ForkJoin 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386795/