【发布时间】:2015-03-09 09:22:12
【问题描述】:
我的场景: 我有一个应该每秒运行一次的计算。运行后,应该等待大约 200 毫秒,以便其他东西赶上。如果计算在一秒钟后仍在运行,则应再次启动,但程序应等到完成并在完成后 200 毫秒开始下一次计算。
我现在的做法:
_refreshFinished = new Subject<bool>();
_autoRefresher = Observable.Interval(TimeSpan.FromMilliseconds(1000))
.Zip(_refreshFinished, (x,y) => x)
.Subscribe(x => AutoRefresh(stuff));
这段代码的问题是,我认为在计算完成后没有办法延迟。 Delay 方法仅延迟可观察集合的第一个元素。通常这种行为是正确的一次,因为如果你想缓冲每个人,你将不得不缓冲无限数量的元素,但是由于延迟对 Autorefesh 的调用 200 毫秒也会延迟 _refreshFinished 的输出 200 毫秒,因此不会有缓冲开销. 基本上我想要一个 Observable,它每 MaxTime(some_call,1000ms) 触发一次,然后延迟 200ms 甚至更好,一些动态值。在这一点上,我什至并不真正关心贯穿其中的价值观,尽管将来可能会改变。
我愿意接受任何建议
【问题讨论】:
标签: c# .net system.reactive