如何等待所有异步完成?

james04

我有一个我想做的请求清单,我想等待所有请求完成才能继续。我正在使用带有重复和异步的Kotlin协程,如下所示。

viewModelScope.launch(Dispatchers.IO) {
            repeat(serverAccountList.size) { 
                async { 
                    createHelloRequest(it)  // suspend function
                }
            }



            withContext(Dispatchers.Main) {
                _isLoading.value = false
            }
        }

我如何加入他们,以便我可以在Main Dispatcher中继续我的代码?

马克·托波尼克(Marko Topolnik)

不要Dispatchers.IO用来调用可挂起(非阻塞)函数。您所有的代码都可以保留在Main调度程序上。此外,使用coroutineScopelaunch尽可能多的子任务,因为你需要和科特林将确保所有的都完成后再coroutineScope调用完成。

全部放在一起,您的代码应如下所示:

viewModelScope.launch {
    _isLoading.value = true
    coroutineScope {
        repeat(serverAccountList.size) {
            launch { createHelloRequest(it) }
        }
    }
    _isLoading.value = false
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章