multithreading - Kotlin 协程 : Waiting for multiple threads to finish

标签 multithreading kotlin parallel-processing kotlin-coroutines coroutine

因此,第一次查看协程时,我想并行处理大量数据并等待它完成。我环顾四周,看到了 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()
}

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

相关文章:

c++ - 两个并行运行的ncurses窗口

algorithm - 高效地并行排序多个字符串以进行展示

iphone - 如何在后台线程上定期从服务器轮询数据?

c - 如何使用多个写入器和多个读取器来实现 Readers Writers

android - Kotlin 无法识别类型参数

android-studio - Kotlin - 可解析类型不匹配 : Required: String, 找到 : String?

JavaFX 并发 - 使用任务,该任务在线程中运行,但挂起 UI

c - 线程无限期地等待计时器信号

android - 如何访问这个内部存储目录?

c# - MaxDegreeOfParallelism 决定最优值