Im Разработка приложения Xamarin.Ios little dictionary, он отправляет запрос GET на сервер и возвращает значение по ключу (слово), ввод текста на SearchBar, и я наблюдаю на его событии TextChanged, хорошо, что мне удалось отправить запрос наблюдаемыми, но я хочу показать LoadView, если Request занимает более 1 или 2 секунды ... Я попробовал Buffer(), но он сделал не работает, так вот код спасибо!Rx Показать Загрузка (индикатор выполнения или что-то в этом роде) Если веб-запрос занимает слишком много времени
var dataStream = Observable.FromEventPattern<UISearchBarTextChangedEventArgs>(ev => searchBar.TextChanged += ev,
ev => searchBar.TextChanged -= ev)
.Select(o => o.EventArgs.SearchText)
.DistinctUntilChanged()
.Throttle(TimeSpan.FromMilliseconds(300))
.ObserveOn(SynchronizationContext.Current)
.Select(t =>
{
#if DEBUG
Console.WriteLine(t);
#endif
var instance = TranslateWebClient.Instance;//this is WebClient From where Get Request is made
var data = instance.GetWordAsync(t);
return data.ToObservable().ObserveOn(SynchronizationContext.Current);
})
.Switch();
dataStream.Subscribe(o =>
{
if (o == null || o.Count() == 0)
{
wordsTableView.DataSource = null;
wordsTableView.ReloadData();
return;
}
_words = o;
initDataToUI();
}, ex =>
{
if (ex is WebClient.NoInternetException)
{
//handle exception
}
});
либо используют асинхронные версии вызовов, либо завершают их в «ждут Task.Run» –