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

ayo*_*age 8 reactive-programming rx-java rx-android reactivex

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

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

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

谢谢阅读.

Dav*_*ten 12

当您调用interval一个与给定调度程序中的单个线程相对应的worker时(默认为computation):

Observable
    .interval(5, TimeUnit.SECONDS)
    .flatMap(n -> task());
Run Code Online (Sandbox Code Playgroud)

或者如果任务没有返回任何内容:

Observable
   .interval(5, TimeUnit.SECONDS)
   .doOnNext(n -> task());
Run Code Online (Sandbox Code Playgroud)

这意味着每5秒就会运行一次,但如果任务需要5秒或更长时间,那么任务将连续运行(但不会同时运行).

如果要确保运行任务之间存在差距,则可以根据上一个任务完成的时间跳过任务.如果你需要,我可以把它充实.


dkz*_*kzm 5

Dave Moten的答案有一个小修正:如果需要它才能真正起作用-您不要忘记订阅。你应该做

   Observable
    .interval(5, TimeUnit.SECONDS)
    .doOnNext(n -> task())
    .subscribe()
Run Code Online (Sandbox Code Playgroud)