android - Kotlin 协程等待 2 个或更多不同的并发请求

标签 android kotlin kotlin-coroutines android-viewmodel

我正在使用 kotlin 协程从带有 viewmodel 的 android 中的服务器获取响应。
问题是我想获得两个不同的请求响应来更新 ui 但想同时执行它们并等待它们完成。然后使用收到的所有结果更新 ui。
如果在每个请求之后使用 async 和 await 它将一个一个地执行并且它不是并发的,如果使用请求的映射和 awaitAll(),我无法处理多种数据类型(数据类),因为两个请求的数据类型不同.
可能不止两个请求。
这种情况我该怎么办?

val job = viewModelScope.launch {

        val a = async { firstUseCase.execute() }.await()
        val b = async { secondUseCase.execute() }.await()
 }

最佳答案

您只需要首先调用 async 来启动每个请求为了获得并发行为,然后 await对于所有这些,无论您是一个接一个地单独执行,还是使用 awaitAll 一次全部执行.
个别:

viewModelScope.launch {
    val a = async { firstUseCase.execute() }
    val b = async { secondUseCase.execute() }

    val resA = a.await()
    val resB = b.await()

    //Use results 'resA' and 'resB' here
}
或与 awaitAll :
viewModelScope.launch {
    val a = async { firstUseCase.execute() }
    val b = async { secondUseCase.execute() }

    val (resA, resB) = awaitAll(a, b)

    //Use results 'resA' and 'resB' here
}

关于android - Kotlin 协程等待 2 个或更多不同的并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62965788/

相关文章:

带条件的 Kotlin distinctBy

java - 步长不规则的 Kotlin 循环

android - 使用协程在 api 请求之前从房间数据库加载数据

android - 获取并解析 USSD 响应数据

java - GCM 不会在登录时向离线用户发送推送通知...不知道我错过了什么?

java - 抽屉导航后退按钮到主要 fragment

android - 在 com.android.support :design:23. 1.0 中更改左侧、顶部、右侧或底部的 TabLayout 图标

validation - Kotlin:在界面中指定输入约束

Kotlin 多平台 : How to start coroutine blockingly without runBlocking

使用 livedata 进行 Android View 模型单元测试