RxJava:如果最后一个任务完成,如何每5秒执行一次任务

时间:2016-12-10 14:10:30

标签: rx-java reactive-programming rx-android reactivex

我正在使用RxJava。我必须每5秒执行一次特定的任务。通过使用“Observable.Interval”方法完美地工作。 但是,我还有以下约束:如果最后一个任务没有完成,则不能执行新任务。在这种情况下,新任务只有在最后一个完成时才需要执行。

我无法弄清楚如何使用RxJava来做到这一点。

所有想法都会非常感激^^

感谢阅读。

2 个答案:

答案 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()