因此,第一次查看协程,我想并行处理数据加载并等待其完成。我环顾四周,看到RunBlocking和Await等,但不确定如何使用它。

我到目前为止有

val jobs = mutableListOf<Job>()
jobs += GlobalScope.launch { processPages(urls, collection) }
jobs += GlobalScope.launch { processPages(urls, collection2) }
jobs += GlobalScope.launch { processPages(urls, collection3) }

然后,我想知道/等待这些完成

最佳答案

如果使用结构化并发概念,则无需手动跟踪并发作业。假设processPages函数执行某种阻塞的IO,则可以将代码封装到以下挂起函数中,该函数在为此工作而设计的IO调度程序中执行代码:

suspend fun processAllPages() = withContext(Dispatchers.IO) {
    // withContext waits for all children coroutines
    launch { processPages(urls, collection) }
    launch { processPages(urls, collection2) }
    launch { processPages(urls, collection3) }
}

现在,如果应用程序的最高功能还不是挂起功能,则可以使用runBlocking调用processAllPages:
runBlocking {
    processAllPages()
}

关于Kotlin协程: Waiting for multiple threads to finish,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54854187/

10-12 05:12