public async Task<IEnumerable<string>> SearchAsync(string term) { Console.WriteLine("SearchEngine B - SearchAsync()"); await Task.Delay(1500);//simulate latency return new[] { "resultC", "resultD" }.AsEnumerable(); } }
public static IObservable<string> Search_DefferedConcatingTasks(string term) { var searchEngineA = new SearchEngineA(); var searchEngineB = new SearchEngineB(); var resultsA = Observable.Defer(() => searchEngineA.SearchAsync(term).ToObservable()); var resultsB = Observable.Defer(() => searchEngineB.SearchAsync(term).ToObservable()); return resultsA .Concat(resultsB) .SelectMany(x => x); }