news 2026/10/7 10:56:01

第092篇 协程异常处理:从 try-catch 到 CoroutineExceptionHandler

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第092篇 协程异常处理:从 try-catch 到 CoroutineExceptionHandler

协程里最贵的 bug 不是崩溃,是"静默地不干活"。上一节把 Job 的取消传播讲清了,本节顺着异常这条线往下走:异常从协程抛出后经过哪些环节、到哪儿被接住、CancellationException为什么要特殊对待、以及CoroutineExceptionHandler究竟在什么位置生效。这题在面试里的分层非常明显——只答"用 try/catch"是入门,能把传播路径和取消语义讲完整,才算过了这一关。

先把结论放在前面:协程异常处理有三条主线。①传播规则:launch的异常会取消父 Job 并向上抛,async的异常被Deferred持有、需await()才会重新抛出;②取消语义:CancellationException是协程的正常终止信号,不该被catch吞掉,吞掉会导致Job一直停在 Cancelling 状态(协程"卡住不结束");③兜底位置:CoroutineExceptionHandler只对根协程(没有父 Job 的)生效,给子协程装它不起作用。

机制拆解

先看异常是怎么移动的。协程体里throw一个异常 → 异常被包装成JobCancellationException之类的形式交给当前 Job → Jo

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 10:55:41

Altium Designer网络管理器:PCB后期GND/VCC批量优化实战

1. 为什么网络管理器是PCB后期优化的隐藏利器画过几块板子的人大概都有这种体会:原理图阶段网络命名随意,GND写成GND_1、GND_2,VCC分成VCC_3V3、VCC_5V、VCC_MAIN,等到PCB布局布线快收尾了,突然发现电源网络需要统一加…

作者头像 李华
网站建设 2026/10/7 10:55:07

两阶段鲁棒优化在多微网容量配置与联合调度中的建模与仿真

多微网联合调度这两年确实是个热门方向,但真正能把“两阶段鲁棒优化”和“容量配置”串起来做仿真的人并不算多。原因倒也不复杂,这类问题涉及的不确定集构建、min-max-min三层结构求解、以及投资层与运行层的变量耦合,每一个环节都足够劝退一…

作者头像 李华
网站建设 2026/10/7 10:54:37

流处理工程化实战:从Flink与Spark Streaming到窗口状态管理

打开招聘网站搜大数据岗位,十个里有八个要求熟悉流处理框架,不管你是做平台开发、数据清洗还是实时大屏,绕不开Spark Streaming或者Flink。但很多人学流处理是割裂的——今天看个Kafka入门的博客,明天抄一段WordCount代码&#xf…

作者头像 李华
网站建设 2026/10/7 10:54:13

从Kafka到Pulsar:消息中间件创新实践与核心架构解析

消息中间件这玩意儿,平时在业务代码里看不见摸不着,但一旦流量上来,你就知道它有多重要。所以看到 COSCon‘25 同场活动 Pulsar Developer Day 的议程正式发布时,我第一反应是:这届开源大会是真懂开发者的痛点。作为在…

作者头像 李华
网站建设 2026/10/7 10:54:13

PHP支付接口集成设计:PaySDK源码实现与多渠道统一抽象

简介:这份资源是基于PHP的PaySDK支付接口集成设计源码,面向需要为Web应用接入在线支付能力的PHP开发者,尤其适合希望统一封装支付宝、微信支付等主流渠道的中级开发者。项目以PHP与HTML为主要实现语言,兼容PHP 5.4及以上环境&…

作者头像 李华
网站建设 2026/10/7 10:53:59

STM32与高压电路隔离方案:4N25光耦工作原理与设计实例

1. 为什么STM32和高压电路之间必须加一道隔离1.1 直接相连的三个隐患做嵌入式项目,只要跟220V交流、24V工业设备、电机驱动板沾上边,就绕不开一个让人头疼的问题:STM32的GPIO只有3.3V逻辑,怎么跟高压电路安全地交换信号&#xff1…

作者头像 李华