使用 RxJava 进行定期请求时如何避免重叠请求
How to avoid overlapping requests when doing periodic requests with RxJava
我想使用 RxJava(实际上是 RxJava2)定期发送网络 (HTTP) 请求。第一次尝试看起来或多或少像这样(改编自 source):
Observable.interval(5, TimeUnit.SECONDS, Schedulers.io())
.map(tick -> sendNetworkRequest())
这将每 5 秒调用一次 sendNetworkRequest。
但是,如果 sendNetworkRequest() 需要一些时间才能完成(例如在慢速网络上,或者如果有多次重试......)请求将会重叠。
我想做的是确保在个请求之间有5秒的间隔,即从上一个请求结束到下一个请求开始.
如何使用 RxJava 实现这一点?
使用repeatWhen
Observable.fromCallable(sendNetworkRequest())
.repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS));
我想使用 RxJava(实际上是 RxJava2)定期发送网络 (HTTP) 请求。第一次尝试看起来或多或少像这样(改编自 source):
Observable.interval(5, TimeUnit.SECONDS, Schedulers.io())
.map(tick -> sendNetworkRequest())
这将每 5 秒调用一次 sendNetworkRequest。
但是,如果 sendNetworkRequest() 需要一些时间才能完成(例如在慢速网络上,或者如果有多次重试......)请求将会重叠。
我想做的是确保在个请求之间有5秒的间隔,即从上一个请求结束到下一个请求开始.
如何使用 RxJava 实现这一点?
使用repeatWhen
Observable.fromCallable(sendNetworkRequest())
.repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS));