gpt4 book ai didi

java - 如何并行执行 2 个 Observable,忽略它们的结果并执行下一个 Observable

转载 作者:行者123 更新时间:2023-11-30 08:49:04 25 4
gpt4 key购买 nike

我必须并行执行 2 个 observable(不关心它们的输出),当它们都完成时 -> 运行另一个 observable。

这是我的解决方案,但我觉得还有更好的:

rx.Observable<GameObject> obs1 = ...;
rx.Observable<GameObject> obs2 = ...;

rx.Observable.merge(obs1,obs2).takeLast(1)
.flatMap(mergeObj -> {

return payoutStrategy.calculatePayout(gameTemplate, gameData);
}).subscribe(results -> {
...
});

我使用 merge 只是为了调用 2 个 obs,然后调用“takeLast(1)”以忽略两次输入“flatMap”。

这个解决方案远谈不上优雅,但它确实有效..

有什么改进方法吗?

谢谢!

最佳答案

concat 对于在完成某事后做某事很有用。因为 calculatePayout 返回的 Observable 的类型可能不同,所以您将空流转换为其结果类型:

obs1.mergeWith(obs2)
.ignoreElements()
.castAs(Payout.class)
.concatWith(payoutStrategy.calculatePayout(gameTemplate, gameData))
.subscribe( ...)

顺便说一句,如果 obs1obs2 不是异步源,那么您可以这样做以确保 obs1obs2 并行运行:

obs1.subscribeOn(scheduler).mergeWith(obs2.subscribeOn(scheduler))
...

根据 obs2 正在做什么,scheduler 可能是 Schedulers.computation()Schedulers.io().

对于多源可观察对象,您也可以这样做:

Observable.just(obs1, obs2, .. , obsN)
.flatMap(o -> o.subscribeOn(Schedulers.computation())
.ignoreElements()
...

关于java - 如何并行执行 2 个 Observable,忽略它们的结果并执行下一个 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com