Я рекомендую изменить метод поиска на асинхронный вызов, который принимает CancellationToken в качестве второго аргумента.Затем вы можете преобразовать это в наблюдаемую последовательность через Observable.ToAsync.Вызов dispose для этой наблюдаемой затем вызовет отмену CancellationToken.Это позволяет легко передавать токен на асинхронные веб-вызовы и т. Д.
public Task Search(string searchText, CancellationToken cancel)
{
// Pass the token on to the async webclient request etc.
}
var searchSub = Observable.ToAsync(c => this.booksService.Search(searchText, c))
.Subscribe( ... );
// do something else
searchSub.Dispose();