gpt4 book ai didi

java - 合并 Observable 列表并等待所有完成

转载 作者:IT老高 更新时间:2023-10-28 11:52:04 25 4
gpt4 key购买 nike

TL;DR如何转换Task.whenAll(List<Task>)进入 RxJava ?

我现有的代码使用 Bolts 构建异步任务列表,并等待所有这些任务完成后再执行其他步骤。本质上,它建立了一个 List<Task>并返回一个 Task根据example on the Bolts site,当列表中的所有 个任务完成时,它被标记为已完成。 .

我正在寻找替换 BoltsRxJava我假设这种方法是建立一个异步任务列表(事先不知道大小)并将它们全部包装成一个 Observable是可能的,但我不知道如何。

我试过查看 merge , zip , concat等等...但无法在 List<Observable> 上工作我会建立起来,因为他们似乎都准备只做两个 Observables如果我正确理解文档,则一次。

我正在努力学习 RxJava并且对它仍然很陌生,所以如果这是一个明显的问题或在某处的文档中解释过,请原谅我;我试过搜索。任何帮助将不胜感激。

最佳答案

如果您有动态任务组合,您可以使用 flatMap。像这样的:

public Observable<Boolean> whenAll(List<Observable<Boolean>> tasks) {
return Observable.from(tasks)
//execute in parallel
.flatMap(task -> task.observeOn(Schedulers.computation()))
//wait, until all task are executed
//be aware, all your observable should emit onComplete event
//otherwise you will wait forever
.toList()
//could implement more intelligent logic. eg. check that everything is successful
.map(results -> true);
}

Another good example of parallel execution

注意:我真的不知道您对错误处理的要求。例如,如果只有一项任务失败该怎么办。我认为你应该验证这种情况。

关于java - 合并 Observable 列表并等待所有完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357919/

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