我正在使用RxJava。我必须每5秒执行一次特定的任务。通过使用“Observable.Interval”方法完美地工作。 但是,我还有以下约束:如果最后一个任务没有完成,则不能执行新任务。在这种情况下,新任务只有在最后一个完成时才需要执行。
我无法弄清楚如何使用RxJava来做到这一点。
所有想法都会非常感激^^
感谢阅读。
答案 0 :(得分:8)
当您调用interval
时,选择的工作程序对应于给定调度程序中的单个线程(默认为computation
):
Observable
.interval(5, TimeUnit.SECONDS)
.flatMap(n -> task());
或者如果任务没有返回任何内容:
Observable
.interval(5, TimeUnit.SECONDS)
.doOnNext(n -> task());
这意味着每5秒会有一次运行,但如果任务需要5秒或更长时间,那么任务将连续运行(但不会同时运行)。
如果要确保运行任务之间存在差距,则可以根据上一个任务完成的时间跳过任务。如果你需要,我可以把它充实。
答案 1 :(得分:4)
对Dave Moten的答案的小修正:如果需要它实际工作 - 你不应该忘记订阅。你应该做
Observable
.interval(5, TimeUnit.SECONDS)
.doOnNext(n -> task())
.subscribe()