相关疑难解决方法(0)

如何使用 RxJava 串行批处理长进程?

我有一大串需要针对远程 API 进行检查的字符串。

Observable.from(List<String> strings) // let's say the `strings` has > 5000 items
   .buffer(50) // splitting the strings into 50-sized chunks, it returns Observable<List<String>> (fast)
   .flatMap((strings) -> {
       // checkPhoneNumbers is a network call using Retrofit's RxJava (slow)
       return mSyncApi.checkPhoneNumbers(strings);
   })
   .reduce( ... ) // aggregate all checking results
   .subscribe( ... );
Run Code Online (Sandbox Code Playgroud)

问题buffer()似乎是发射List<String>太快,以至于.checkPhoneNumbers()几乎同时执行所有多个。我想实现的是排队.checkPhoneNumbers()以更好地支持连接速度较慢的设备。

List<String>预定义的时间间隔内限制发射是没有意义的,因为这对于具有闪电般快速连接的设备来说是一个缺点。我在 之后立即尝试了 RxJava serialize()flatMap()但它似乎没有任何区别(虽然我不知道它是否正确使用serialize)。

任何替代方法表示赞赏!谢谢。

reactive-programming rx-java

2
推荐指数
1
解决办法
2503
查看次数

标签 统计

reactive-programming ×1

rx-java ×1