我的情境:
我有一个计算需要每秒运行一次。在运行后,等待约200毫秒以便其他操作赶上来。如果计算超过一秒仍然在运行,它应该再次启动,但程序应该等待直到它完成并在完成后200毫秒后开始下一个计算。
我现在的做法:
这段代码的问题在于,我看不到在计算完成后如何设置延迟。Delay方法只能延迟可观察集合的第一个元素。通常这种行为是正确的,因为如果你想要缓冲所有元素,你将不得不缓冲无限数量的元素。但是,由于将对Autorefesh的调用延迟200ms也会延迟_refreshFinished的输出200ms,所以不会有缓冲开销。基本上,我想要一个Observable,每隔MaxTime(some_call,1000ms)就会触发一次,然后延迟200ms甚至更好,可以是一些动态值。在这一点上,我实际上并不关心正在运行的值,尽管这可能会在未来发生改变。
我对任何建议都持开放态度。
我现在的做法:
_refreshFinished = new Subject<bool>();
_autoRefresher = Observable.Interval(TimeSpan.FromMilliseconds(1000))
.Zip(_refreshFinished, (x,y) => x)
.Subscribe(x => AutoRefresh(stuff));
这段代码的问题在于,我看不到在计算完成后如何设置延迟。Delay方法只能延迟可观察集合的第一个元素。通常这种行为是正确的,因为如果你想要缓冲所有元素,你将不得不缓冲无限数量的元素。但是,由于将对Autorefesh的调用延迟200ms也会延迟_refreshFinished的输出200ms,所以不会有缓冲开销。基本上,我想要一个Observable,每隔MaxTime(some_call,1000ms)就会触发一次,然后延迟200ms甚至更好,可以是一些动态值。在这一点上,我实际上并不关心正在运行的值,尽管这可能会在未来发生改变。
我对任何建议都持开放态度。