本篇解析 example-cancel-03.kt,探讨协程被取消后发生了什么。
1. 核心现象
- CancellationException:当协程被取消时,内部的可挂起函数(如
delay)会抛出CancellationException。 - 捕获行为:如果你在协程内部使用了
try-catch并捕获了所有Exception,你会发现你可以“拦截”到这个取消信号。
2. 开发者感悟
协程的取消本质上是通过抛异常实现的。
- 如果你捕获了异常但没有重新抛出,协程逻辑上虽然结束了,但它可能依然在执行后续代码。
- 切记:通常不建议捕获
CancellationException,除非你需要做特定的资源清理逻辑,且清理完后应当将其重新抛出。