Skip to content
阅读进度

协程怎样取消 怎样处理异常? ​

返回 架构与 SDK 目录

标准回答 ​

结构化并发让子任务受父作用域管理。取消通常是协作式的,挂起点或主动检查会响应取消;CPU 长循环要检查 isActive 或 ensureActive。捕获异常时应保留 CancellationException 的取消语义,不能把取消一律显示为“请求失败”。(协程异常处理)

机制解释 ​

普通父子 Job 中,一个子任务失败可能影响同级任务;SupervisorJob 等机制改变失败传播关系,但不代表异常自动被处理。CoroutineExceptionHandler 是未处理异常的兜底机制,不是恢复当前失败协程的替代品。

延伸追问 ​

callback API 包一层 suspend 就结束了吗?还要关联取消与底层 cancel,防止多次恢复,并处理“取消与回调同时到来”的竞争。长期事件流通常更适合 callbackFlow,并在 awaitClose 释放注册。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。