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()
我正在使用 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()