我正在使用 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/