协程进阶:04. 检查状态实现取消

本篇解析 example-cancel-04.kt,介绍如何让密集型计算任务也能响应取消。

1. 核心属性:isActive

isActiveCoroutineScope 的一个扩展属性。

  • 原理:当协程被外部调用 cancel() 时,isActive 会从 true 变为 false
  • 代码方案:将传统的循环条件从 while (i < 5) 改为 while (isActive)

2. 为什么这样有效?

通过手动检查 isActive,协程在每一次循环迭代时都会确认自己是否还需要继续运行。如果检测到已取消,循环就会自然终止。

3. 开发者感悟

这是处理耗时计算逻辑(如图片处理、大数据过滤)时的标准做法。除了 isActive,也可以使用 yield() 函数,它不仅会检查取消状态,还会让出执行权给其他协程。

,