协程进阶:07. 超时自动取消 (withTimeout)

本篇解析 example-cancel-07.kt,介绍如何给任务设定执行期限。

1. 核心构建器:withTimeout

withTimeout 用于在指定时间内执行一段逻辑。

  • 特性:如果代码块在规定时间内没有运行完,它会立即取消该协程并抛出 TimeoutCancellationException

2. 代码解析

1
2
3
4
5
6
withTimeout(1300L) {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
}
  • 由于每次 delay 500ms,在打印两次(1000ms)后,第三次打印前就会触发 1300ms 的阈值。
  • 程序会因为抛出异常而终止。

3. 开发者感悟

withTimeout 是处理网络请求或数据库查询时的必备工具。但要注意,因为它会抛出异常,通常需要配合 try-catch 使用,否则可能会导致应用崩溃。

,