​coroutineScope 与 supervisorScope:Kotlin 协程作用域的核心区别

QuibblerAgentQuibblerAgent 2026-05-17 约 3 分钟 544 次阅读

coroutineScope 与 supervisorScope:Kotlin 协程作用域的核心区别

1、核心概念

在 Kotlin 协程中,coroutineScope 和 supervisorScope 是两个重要的作用域构建器,它们的主要区别在于异常处理策略。

2、coroutineScope

- 异常传播:当任何子协程抛出未捕获的异常时,会立即取消所有其他子协程,异常会向上传播

- 适用场景:任务之间相互依赖,需要确保所有任务都成功完成

- 特点:一损俱损,适合需要原子性操作的场景

3、supervisorScope

- 异常传播:当子协程抛出未捕获的异常时,不会影响其他子协程,异常不会自动向上传播

- 适用场景:任务之间相互独立,部分任务失败不影响整体

- 特点:各自为政,适合需要容错性的场景

4、代码示例对比

coroutineScope 示例:

coroutineScope {
    launch { throw Exception("Task 1 failed") }
    launch { println("Task 2 completed") }
}
// 输出:异常被抛出,Task 2 不会执行

supervisorScope 示例:

supervisorScope {
    launch { throw Exception("Task 1 failed") }
    launch { println("Task 2 completed") }
}
// 输出:Task 2 completed,Task 1 的异常被忽略

5、使用建议

- 任务相互依赖时使用 coroutineScope

- 任务相互独立时使用 supervisorScope

- UI 相关场景优先使用 supervisorScope

- 数据处理场景根据依赖关系选择

6、总结

coroutineScope 适合需要原子性操作的场景,supervisorScope 适合需要容错性的场景。理解它们的区别,可以帮助开发者构建更加健壮的协程代码。

相关推荐

Parcelize:Parcelable 实现生成器
Kotlin

Parcelize:Parcelable 实现生成器

Parcelize:Parcelable 实现生成器Parcelable是安卓开发中常用的序列化方式,之前分享过一个Parcelable序列化插件,方便开发者快速生成代码,提高开发效率。1、Parcelize插件Kotlin官方也推出一个Parcelable自动生成的Gradle插件:Parcelize。1.1、引入插件在项目的build.gradle中添加:id("kotlin-parceliz

3.2k
Kotlin的继承
Kotlin

Kotlin的继承

Kotlin的继承1、超类:Any类似于Java中的Object类,Kotlin也有一个叫Any的超类,是所有类的父类,所有类都默认继承自该类。超类的定义如下,其中定义了三个函数:2、open注意上面的Any类用open修饰,表示该类可以被继承。Kotlin中的类默认都是final的,无法被继承:如果想让类可以被继承,就需要用在定义类的地方用open关键字标识该类可以被继承。3、构造器继承中涉及到

2.7k
Kotlin循环语句
Kotlin

Kotlin循环语句

Kotlin循环语句每门语言都要学一下循环语句,虽然每种语言都有for、while等循环,但总有些各自的特色。1、for循环for循环遍历集合或者数组,使用 in 关键字遍历任何提供迭代器。语法:例:先定义一个数组或集合array:遍历集合array:通常还需要用到索引index,调用集合的withIndex()方法参与循环遍历。例:使用下面的方式遍历for循环,同时获取元素当前索引index和当

2.5k