本篇解析 example-cancel-04.kt,介绍如何让密集型计算任务也能响应取消。
1. 核心属性:isActive
isActive 是 CoroutineScope 的一个扩展属性。
- 原理:当协程被外部调用
cancel()时,isActive会从true变为false。 - 代码方案:将传统的循环条件从
while (i < 5)改为while (isActive)。
2. 为什么这样有效?
通过手动检查 isActive,协程在每一次循环迭代时都会确认自己是否还需要继续运行。如果检测到已取消,循环就会自然终止。
3. 开发者感悟
这是处理耗时计算逻辑(如图片处理、大数据过滤)时的标准做法。除了 isActive,也可以使用 yield() 函数,它不仅会检查取消状态,还会让出执行权给其他协程。