Вам будет легко решить эту проблему.
Если я предполагаю, что у вас есть наблюдаемая строка, которая инициирует поиск, и что у вас есть доменная служба, которая возвращает объект Result
при получении строки, то вам нужен такой код:
IObservable<string> searchText
= ...;
Func<string, IObservable<Result>> searchRequest
= Observable.FromAsyncPattern<string, Result>(
search.BeginInvoke,
search.EndInvoke);
IObservable<Result> results
= (from st in searchText
select searchRequest(st))
.Switch();
Магия заключается в методе расширения Switch
, который «переключается» на последнюю наблюдаемую информацию, возвращаемую из IObservable<IObservable<Result>>
- да, это вложенная наблюдаемая.
Когда приходит новый searchText
, запрос возвращает новый IObservable<Result>
, созданный из входящего поискового текста. Switch
затем переключает наблюдаемую results
на использование этой последней наблюдаемой и просто игнорирует все ранее созданные наблюдаемые.
Таким образом, в результате наблюдаются только последние результаты поиска, а все предыдущие результаты игнорируются.
Надеюсь, это имеет смысл. : -)