0

ここで Rx の妥当な限界を押し広げているのかもしれませんが、私がしようとしているのは、リモート ステータスをポーリングすることですが、ポーリングを妥当なものにレート制限します。

私が現在持っているものの擬似コード:

IObservable<data> RemoteObservable(Remote remote) 
{
   var onceonly = Observable.FromAsyncPattern(remote.Begin, remote.End);
   return Observable.Defer(() => onceonly())
                    .ObserveOn(Scheduler.ThreadPool)
                    .Repeat();
}

ThrottleまたはIntervalを使用することが役立つかどうかはわかりません。私の考えでは、スロットリングとは受信イベントを制限することであり、リピート レートを制限することではありません。


EDIT : 以下のサブクエスチョンについて別の質問をしたり、答えたりしました。.

サブ質問: この種の Observable で 2 つのサブスクリプションを許可する方法はありますか? UIにステータスを継続的に表示したいだけでなく、いくつかのアクティビティ中にステータスを監視したいのでお願いします(Observableでこれをやろうとしている理由の1つです)。

4

3 に答える 3

1

どうですか:

var onceOnly = Observable.FromAsyncPattern(remote.Begin, remote.End);

Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(5))
    .SelectMany(_ => onceOnly());
于 2012-07-26T13:26:48.977 に答える
0

サブ質問については、そのオブジェクトのイベントをリッスンするものが 1 つあるように聞こえます (私は Observables に精通していないので、それがどのように機能するかわかりません)。その後、そのオブジェクトが独自のイベントを発生させ、複数回サブスクライブできます。

于 2012-07-26T09:08:23.423 に答える
0

ここで同様の質問を追跡することができました。これにより、コードの更新された例は次のようになります。

return Observable.Defer(() => onceonly())
                 .ObserveOn(Scheduler.ThreadPool)
                 .Concat(Observable.Empty<data>().Delay(TimeSpan.FromSeconds(5)))
                 .Repeat();

これうまくいくようです。

(ただし、 をremote呼び出すたびにオブジェクトを再インスタンス化する必要があることを発見しましたFromAsyncPattern。どうすればよいかわかりませんRepeat)

于 2012-07-26T11:36:51.960 に答える