0

也许我在这里推动了 Rx 的合理范围,但我想做的是轮询远程状态,但将轮询速度限制在合理的范围内。

我目前拥有的伪代码:

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

我无法确定 usingThrottleIntervalin there 是否有帮助。在我看来,节流是关于限制传入事件,而不是限制重复率。


编辑:我问/回答了一个关于下面子问题的单独问题:如何使“延迟”的 observable 只订阅第一个订阅者?.

子问题:有没有办法允许对这种 Observable 进行两次订阅,而不会创建两倍的远程调用?我问是因为我想在 UI 中持续显示状态,但也在某些活动期间对其进行监控(这是我尝试使用 Observables 执行此操作的原因之一)。

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

对于子问题,听起来您可以让一件事监听该对象的事件(我不熟悉 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 回答