Z
ZHANK
编程在线教程Kotlin 教程协程上下文与作用域
协程

协程上下文与作用域

CoroutineScope/Dispatchers/Job、SupervisorJob、取消

协程上下文与作用域

理解 CoroutineScopeJob 是正确使用协程的关键。

学完本章你将: 掌握 CoroutineScope/Job、SupervisorJob、取消。


CoroutineScope

kotlin
// 创建作用域
val scope = CoroutineScope(Dispatchers.IO)

scope.launch {
    // 在 IO 线程执行
}

// 记得释放
scope.cancel()

SupervisorJob

kotlin
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)

scope.launch {
    throw Exception("失败")   // 只影响自己
}
scope.launch {
    delay(1000)
    println("我还在运行")     // ✅ 不受影响
}
// 普通 Job:一个失败全家都取消
// SupervisorJob:各自独立

取消协程

kotlin
val job = launch {
    repeat(100) { i ->
        delay(100)
        println("$i")
    }
}
delay(500)
job.cancel()        // 取消

// 协作式取消——只有挂起点检查取消

withContext 切换上下文

kotlin
suspend fun loadData() = withContext(Dispatchers.IO) {
    // 在 IO 线程读取
    val data = readFile()
    // 返回后回到原上下文
    data
}