.net - 在 Rx 中聚合 ForkJoin 的结果

标签 .net system.reactive reactive-programming

给定这段代码:

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/

相关文章:

c# - 内存表情的最快方法

c# - System.Web.Script.Serialization.JavaScriptSerializer 还是 System.Runtime.Serialization.Json.DataContractJsonSerializer?

.net - Html Agility Pack 返回无效的 XPath

.net - onCompleted 和 onNext 未到达

c# - 如何处理 SelectMany 语句中异步方法的异常

c# - 即使进行简约测试,GCHandle.FromIntPtr 也始终显示 "value belongs to another domain"

system.reactive - Reactive Extensions Switch() 在搜索中

haskell - 学习 Netwire 的简单练习?

javascript - 如何在 Vue.js 中使两个输入相互 react

ios - ReactiveSwift 中的 API 请求