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

RxJava: How to to execute a task every 5 seconds only if the last task finished

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

我不知道如何用 RxJava 简单地做到这一点。

所有想法将不胜感激^^

感谢阅读。

当您调用 interval 时,会从给定的调度程序中选择一个对应于单个线程的工作线程(默认为 computation):

Observable
    .interval(5, TimeUnit.SECONDS)
    .flatMap(n -> task());

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

Observable
   .interval(5, TimeUnit.SECONDS)
   .doOnNext(n -> task());

这意味着每 5 秒就会有一个 运行,但如果任务需要 5 秒或更多秒,那么任务将 运行 连续(但不是同时)。

如果你想确保 运行ning 任务之间的间隔,那么你可以根据最后一个任务的完成时间跳过任务。如果你需要的话,我可以充实它。

对 Dave Moten 的回答的小修正:如果需要它实际工作 - 你不应该忘记订阅。你应该做

   Observable
    .interval(5, TimeUnit.SECONDS)
    .doOnNext(n -> task())
    .subscribe()