在 Kotlin 协程中切换线程是一项非常常见且高效的操作。其核心方法是使用
withContext这个挂起函数。理解如何切换只是第一步,更重要的是理解withContext是如何在底层优雅且高效地完成这一工作的,这涉及到挂起函数的 CPS 转换、状态机以及协程调度器的协同工作。"
第一部分:如何切换线程?
在协程中,你永远不会直接"操作线程",而是通过协程调度器来指定代码块应该运行在哪个线程或线程池上。
主要方法:withContext
withContext 是最常用、最推荐的线程切换方式。
kotlin
suspend fun someSuspendingFunction() {
// 默认在父协程的上下文中执行(比如在主线程)
doUiWork()
// 使用 withContext 切换到 IO 线程池执行耗时 IO 操作
val result = withContext(Dispatchers.IO) {
performNetworkRequest() // 这个函数会在 IO 线程运行
}
// 执行完后,自动切回原来的上下文(主线程)
updateUi(result)
}
特点:
-
挂起非阻塞:它会挂起当前协程,而不是阻塞当前线程。
-
自动切回:当
withContext块中的代码执行完毕后,协程会自动恢复到原来的调度器上继续

最低0.47元/天 解锁文章
1544

被折叠的 条评论
为什么被折叠?



