public static IObservable<string> Search_WithCancellation(string term)
{
return Observable.Create<string>(async (o, cancellationToken) =>
{
var searchEngineA = new SearchEngineA();
var searchEngineB = new SearchEngineB();
var resultsA = await searchEngineA.SearchAsync(term);
foreach (var result in resultsA)
{
cancellationToken.ThrowIfCancellationRequested();
o.OnNext(result);
}
cancellationToken.ThrowIfCancellationRequested();
var resultsB = await searchEngineB.SearchAsync(term);
foreach (var result in resultsB)
{
cancellationToken.ThrowIfCancellationRequested();
o.OnNext(result);
}
o.OnCompleted();
});
}