外观
协程怎样取消 怎样处理异常?
标准回答
结构化并发让子任务受父作用域管理。取消通常是协作式的,挂起点或主动检查会响应取消;CPU 长循环要检查 isActive 或 ensureActive。捕获异常时应保留 CancellationException 的取消语义,不能把取消一律显示为“请求失败”。(协程异常处理)
机制解释
普通父子 Job 中,一个子任务失败可能影响同级任务;SupervisorJob 等机制改变失败传播关系,但不代表异常自动被处理。CoroutineExceptionHandler 是未处理异常的兜底机制,不是恢复当前失败协程的替代品。
延伸追问
callback API 包一层 suspend 就结束了吗?还要关联取消与底层 cancel,防止多次恢复,并处理“取消与回调同时到来”的竞争。长期事件流通常更适合 callbackFlow,并在 awaitClose 释放注册。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q27