我有一个我想做的请求清单,我想等待所有请求完成才能继续。我正在使用带有重复和异步的Kotlin协程,如下所示。
viewModelScope.launch(Dispatchers.IO) {
repeat(serverAccountList.size) {
async {
createHelloRequest(it) // suspend function
}
}
withContext(Dispatchers.Main) {
_isLoading.value = false
}
}
我如何加入他们,以便我可以在Main Dispatcher中继续执行我的代码?
答案 0 :(得分:0)
您需要致电await
进行异步操作,例如
...
val stuff = async {...}
stuff.await()
...
答案 1 :(得分:0)
不要使用Car
来调用可挂起(非阻塞)函数。您所有的代码都可以保留在Dispatchers.IO
调度程序上。另外,根据需要使用Main
到coroutineScope
子任务,Kotlin将确保在launch
调用完成之前完成所有任务。
所有内容放在一起,您的代码应如下所示:
coroutineScope
答案 2 :(得分:0)
val jobs = mutableListOf<Job>()
viewModelScope.launch(Dispatchers.IO) {
repeat(serverAccountList.size) {
// save all job handles to mutable variable
jobs += async { createHelloRequest(it) }
}
// await on all jobs
jobs.awaitAll()
withContext(Dispatchers.Main) {
_isLoading.value = false
}
}