使用Observable进行的异步轮询受阻



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

我目前拥有的伪代码:

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

我不知道在那里使用Throttle还是Interval可能会有所帮助。在我看来,节流是指限制传入事件,而不是限制重复率。


编辑:我问/回答了一个关于下面子问题的单独问题:如何使"延迟"可观察到的内容只订阅第一个订阅者?。

子问题:有没有一种方法可以允许在这种Observable上进行两次订阅,而不会创建两倍的远程调用?我之所以这么问,是因为我想在UI中持续显示状态,但也要在一些活动中监视它(这也是我尝试使用Observables这样做的原因之一)

怎么样:

var onceOnly = Observable.FromAsyncPattern(remote.Begin, remote.End);
Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(5))
    .SelectMany(_ => onceOnly());

对于这个子问题,听起来你可以让一件事监听那个对象的事件(我不熟悉Observables,所以不确定它是如何工作的),然后让那个东西触发自己的事件,你可以多次订阅。

我设法在这里找到了一个类似的问题,我的代码的更新示例如下:

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

出现以工作。

(但是,我发现每次调用FromAsyncPattern时都需要重新实例化我的remote对象。不确定如何才能Repeat

相关内容

  • 没有找到相关文章

最新更新