3

このコードを考えると:

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()の結果変数は の配列です。IEnumerable<Book>

ForkJoin()の結果を集計する他の方法はありますか? ForkJoin と一緒にMerge()のようなものを使用したいと考えていました。

4

2 に答える 2

4

3 つのサービスすべてが のリストを返すと仮定すると、 を使用してリストをマージ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()出力をリストにする必要がない場合は、呼び出しを削除できます。

于 2010-12-08T17:00:46.220 に答える