rx-java - 使用 RxJava 进行定期请求时如何避免重叠请求
问题描述
我想使用 RxJava(实际上是 RxJava2)定期发送网络(HTTP)请求。第一次尝试看起来或多或少像这样(改编自此来源):
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));
推荐阅读
- python - Flask-socketio 在路由中发出
- c# - Office365 单点注销
- jmeter - 如何在 Jmeter 中获取采样器的直接父名称
- scala - Scala 类设置器中的空间问题
- html - HTML Materialize - “halfway-fab”图标下部位于卡片显示类后面
- mysql - 错误代码 2068:由于 root 用户的访问限制,文件请求被拒绝
- c# - MongoCollectionSettings.GuidRepresentation 已过时,有什么替代方案?
- css - 我如何在 bootstrap 4(水平+垂直)内部居中 html“ul”元素
- firebase - How to make sure user is logged in using Firebase and Flutter
- snowflake-cloud-data-platform - 将多行转换为雪花中的一个逗号分隔值