RxJava 2 Zip操作在不同的线程中

时间:2018-02-28 10:31:30

标签: java rx-java2

我使用RxJava 2创建了一个非常简单的例子(我开发的所有内容都使用了RxJava 1),我发现了下一个我根本不了解的行为。我有下一个带有zip操作的Observable:

Observable.zip(getGame(gameId), getDetail(gameId), getReviews(gameId),
            (game, detail, reviews) -> new GameInfo(game, detail, reviews))
        .subscribeOn(Schedulers.newThread())
        .subscribe(sendGameInfo(asyncResponse));

每个方法都返回一个Observable实例。理论上,我希望每个方法(getGame,getDetail,...)都可以在一个新的Thread中并行执行,但是做一个sysout我注意到所有的时间都是相同的Thread所以它们不是在执行平行。我想这是预期的行为,但是如果我想并行制作有一种方法可以做到这一点,而不必在每个observable中定义一个runnable?

非常感谢。

1 个答案:

答案 0 :(得分:0)

好的,你需要订阅每个Observable

 Observable.zip(getGame(gameId)
                .subscribeOn(Schedulers.from(executor)),
            getDetail(gameId)
                .subscribeOn(Schedulers.from(executor)),
            getReviews(gameId)
                .subscribeOn(Schedulers.from(executor)),
            (game, detail, reviews) -> new GameInfo(game, detail, reviews))
        .subscribeOn(Schedulers.from(executor))
        .subscribe(sendGameInfo(asyncResponse));