[英]How do I correctly timing out an observable?
使用可觀察的from事件,我從Web服務下載了最新的天氣。 我在家里的電話和仿真器上對此進行了測試,效果很好。 我帶着項目一起工作,並在那里使用模擬器運行了該項目。 現在我不確定它是防火牆還是什么,但似乎沒有天氣,它只是一直坐在那里,一直在嘗試。 因此,我想到如果這是一次在手機上發生的事情,那么我需要某種超時方式,如果它無法在10到15秒之內得到天氣,那就放棄。
這是到目前為止的示例代碼
IObservable<IEvent<MyWeather.GetWeatherCompletedEventArgs>> observable =
Observable.FromEvent<MyWeather.GetWeatherCompletedEventArgs>(Global.WeatherService, "MyWeather.GetWeatherCompleted").Take(1);
observable.Subscribe(w =>
{
if (w.EventArgs.Error == null)
{
// Do something with the weather
}
});
Global.WeatherService.GetWeatherAsync(location);
如果什么都沒發生,如何在給定時間后安全超時?
您應該使用FromEventPattern
(而不是FromEvent
),所以我將您的可觀察值更改為:
var observable =
Observable
.FromEventPattern<MyWeather.GetWeatherCompletedEventArgs>(
Global.WeatherService,
"MyWeather.GetWeatherCompleted")
.Take(1);
然后,您可以這樣做:
var timeout =
Observable
.Timer(TimeSpan.FromSeconds(10.0))
.Select(_ => (EventPattern<MyWeather.GetWeatherCompletedEventArgs>)null);
observable
.Amb(timeout)
.Subscribe(w =>
{
if (w != null && w.EventArgs.Error == null)
{
// Do something with the weather
}
});
Observable.Timeout
怎么樣? 它應該做您想要的,還是?
observable.Subscribe(w => ...).Timeout(TimeSpan.FromSeconds(10)).Catch<>(...);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.