【问题标题】:How to parallelize network calls using RxJava?如何使用 RxJava 并行化网络调用?
【发布时间】:2019-03-27 21:30:37
【问题描述】:
final List<Order> orders = Observable
            .from(searchAttributes)
            .filter(searchAttribute-> !searchAttribute.isEmpty())
            .flatMap(searchAttribute-> Observable.just(networkCall(searchAttribute)).subscribeOn(Schedulers.io()))
            .toList()
            .toBlocking()
            .single();

我正在使用以下文章来学习 RxJava : https://proandroiddev.com/understanding-rxjava-subscribeon-and-observeon-744b0c6a41ea

在上面的代码中,networkCall 函数应该发生在一个单独的 IO 线程上,但是网络调用基本上是按顺序发生在同一个 IO 线程上的。如何使用 RxJava 并行化调用?

【问题讨论】:

    标签: java rx-java


    【解决方案1】:

    使用 RxJava 2 可以使用.parallel

    来自this answer

    Flowable<Integer> vals = Flowable.range(1, 10);
    
    vals.parallel()
            .runOn(Schedulers.computation())
            .map(i -> intenseCalculation(i))
            .sequential()
            .subscribe(val -> System.out.println(val));
    
    

    【讨论】:

    • 我们已经在使用较旧的 RxJava,因为 couchbase 因此不能使用它,但仅此而已。
    • 使用 rxjava1 你必须做 . subscribeOn 也在平面图中。如果你看看我链接的答案,这个解决方案也被提出
    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多