1

オブザーバブル 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);

何も起こらない場合、一定時間後に安全にタイムアウトするにはどうすればよいですか?

4

3 に答える 3

1

FromEventPattern(not )を使用する必要がある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
        }
    });
于 2012-04-13T11:19:35.627 に答える
0

どうObservable.Timeoutですか?それはあなたが望むことをするべきですか、それとも?

observable.Subscribe(w => ...).Timeout(TimeSpan.FromSeconds(10)).Catch<>(...);
于 2012-04-13T11:17:41.407 に答える
-2

C# で Latch を使用してみる

http://www.itdevspace.com/2009/05/c-latch-implementation.html

于 2012-04-13T13:23:24.780 に答える