【发布时间】:2021-06-02 11:46:59
【问题描述】:
目前在我的 Kotlin 代码中,我有一组用户,我执行一个 for 循环并对每个用户的信息发出 GET 请求,然后将他们的信息添加到 MutableList。每当有新的用户信息发布到列表时,我都会观察列表并更新我的 UI。
但我想知道如何同时处理所有用户调用并等待最终结果并一次性发布 UI?
【问题讨论】:
标签: kotlin retrofit rx-java kotlin-coroutines
目前在我的 Kotlin 代码中,我有一组用户,我执行一个 for 循环并对每个用户的信息发出 GET 请求,然后将他们的信息添加到 MutableList。每当有新的用户信息发布到列表时,我都会观察列表并更新我的 UI。
但我想知道如何同时处理所有用户调用并等待最终结果并一次性发布 UI?
【问题讨论】:
标签: kotlin retrofit rx-java kotlin-coroutines
您可以使用async 语法来启动请求,然后对它们使用awaitAll(请注意,一旦任何延迟失败,它将立即失败)。
类似:
val one = async { doSomethingUsefulOne() }
val two = async { doSomethingUsefulTwo() }
val result = awaitAll(one, two) // will give you a list of results
因此,在您的情况下,您可以map 覆盖用户并对他们启动async 操作。
示例:https://kotlinexpertise.com/kotlin-coroutines-concurrency/
Roman Elisarov 关于结构化并发的博客:https://elizarov.medium.com/structured-concurrency-722d765aa952(关于并行分解的部分)
【讨论】: