public async Task<IEnumerable<string>> SearchAsync(string term) { Console.WriteLine("SearchEngine A - SearchAsync()"); await Task.Delay(1500);//simulate latency return new[] { "resultA", "resultB" }; } }
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); }