gpt4 book ai didi

asynchronous - 如何使用协程传递结果?

转载 作者:行者123 更新时间:2023-12-02 12:37:59 27 4
gpt4 key购买 nike

假设我有仓库列表。我想遍历所有这些。当每个存储库返回结果时,我想将其传递出去。

val repos = listOf(repo1, repo2, repo3)
val deferredItems = mutableListOf<Deferred<List<result>>>()

repos.forEach { repo ->
deferredItems.add(async { getResult(repo) })
}

val results = mutableListOf<Any>()
deferredItems.forEach { deferredItem ->
results.add(deferredItem.await())
}

println("results :: $results")

在上述情况下,它等待每个存储库返回结果。它按顺序填充results,先是repo1的结果,然后是repo2的结果。如果 repo1repo2 返回结果的时间更长,我们将等待 repo1 的结果,即使我们有 的结果仓库2

有没有办法在我们得到结果后立即传递repo2的结果?

最佳答案

Flow API 几乎直接支持这一点:

repos.asFlow()
.flatMapMerge { flow { emit(getResult(it)) } }
.collect { println(it) }

flatMapMerge 首先收集来自您传递给它的 lambda 的所有 Flow,然后同时收集这些并将它们发送到一旦其中任何一个完成,就向下游发送。

关于asynchronous - 如何使用协程传递结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59584379/

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