本篇解析 example-compose-06.kt。探讨并发任务中的错误级联。
1. 核心现象:一人失败,全家取消
在 coroutineScope 启动的并发任务中,只要其中一个子协程抛出异常,所有其他的兄弟协程都会被取消。
执行流程 (example-compose-06):
- 启动
async#1,它模拟一个非常耗时的计算。 - 启动
async#2,它立即抛出ArithmeticException。 - 结果:
async#1的finally块会立即被执行,因为它被async#2引起的级联取消信号中断了。
2. 开发者总结
这种机制虽然听起来很严格,但它是“结构化并发”的核心精髓。它防止了一个小任务的失败导致整个系统资源(如线程、网络连接)的浪费。在 Android 页面加载多个组件数据时,这种设计能确保一旦主要逻辑报错,整个界面的其他耗时异步加载也会立即停止,从而保持系统的健壮性。