如何等待所有异步完成?

时间:2019-10-26 06:28:44

标签: android kotlin async-await kotlin-coroutines

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

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



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

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

3 个答案:

答案 0 :(得分:0)

您需要致电await进行异步操作,例如

...

val stuff = async {...}
stuff.await()
...

答案 1 :(得分:0)

不要使用Car来调用可挂起(非阻塞)函数。您所有的代码都可以保留在Dispatchers.IO调度程序上。另外,根据需要使用MaincoroutineScope子任务,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
        }
    }