也许我在这里推动Rx的合理范围,但我想要做的是轮询一个远程状态,但速率将轮询限制在合理的范围内。
我目前拥有的伪代码:
IObservable<data> RemoteObservable(Remote remote)
{
var onceonly = Observable.FromAsyncPattern(remote.Begin, remote.End);
return Observable.Defer(() => onceonly())
.ObserveOn(Scheduler.ThreadPool)
.Repeat();
}
我无法确定是否可以使用Throttle
或Interval
。在我看来,限制是关于限制传入的事件,而不是限制重复率。
编辑:我在下面询问/回答了一个关于子问题的单独问题:How to make a `Defer`ed observable only subscribe for the first subscriber?。
子问题:有没有办法在这种Observable上允许两个订阅,而没有创建两倍的远程调用?我问,因为我想在UI中不断显示状态,但也会在某些活动中监控它(我试图用Observables做这个的原因之一)。
答案 0 :(得分:1)
怎么样:
var onceOnly = Observable.FromAsyncPattern(remote.Begin, remote.End);
Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(5))
.SelectMany(_ => onceOnly());
答案 1 :(得分:0)
对于子问题,听起来你可能有一件事听一下该对象的事件(我不熟悉Observables所以不确定它是如何工作的)然后让那个东西触发它自己的事件,你可以多次订阅。
答案 2 :(得分:0)
我设法找到了一个类似的问题here,我的代码的更新示例如下所示:
return Observable.Defer(() => onceonly())
.ObserveOn(Scheduler.ThreadPool)
.Concat(Observable.Empty<data>().Delay(TimeSpan.FromSeconds(5)))
.Repeat();
此似乎正常工作。
(但是我发现每次调用remote
时都需要重新验证我的FromAsyncPattern
对象。不知道我怎么能Repeat
那个