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

2023-11-21

我正在使用 kotlin 协程通过 viewmodel 从 android 中的服务器获取响应。 问题是我想获得两个不同的请求响应来更新用户界面,但想同时执行它们并等待它们完成。然后使用收到的所有结果更新 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
}

Or with 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin 协程等待 2 个或更多不同的并发请求 的相关文章

随机推荐