协程进阶:08. 超时安全返回 (withTimeoutOrNull)

本篇解析 example-cancel-08.kt,介绍一种更温和的超时处理方式.

1. 核心构建器:withTimeoutOrNull

相比于 withTimeout 会抛出异常,withTimeoutOrNull 在超时发生时会返回 null

代码解析

1
2
3
4
5
6
7
8
val result = withTimeoutOrNull(1300L) {
repeat(1000) { i ->
println("I'm sleeping $i ...")
delay(500L)
}
"Done" // 正常结束时返回这个字符串
}
println("Result is $result")
  • 由于 1300ms 后任务被自动取消,块内的 “Done” 无法被返回。
  • result 最终被赋值为 null

2. 为什么使用它?

在很多业务场景下,超时是一个预期内的情况,而不是一个“程序错误”。

  • 例如:尝试请求网络数据,如果 3 秒没返回就显示缓存。
  • 使用 withTimeoutOrNull 可以省去繁琐的 try-catch 模板代码,让逻辑更简洁。

3. 开发者感悟

withTimeoutOrNull 是协程库提供的一个非常人性化的设计。它体现了 Kotlin 追求“代码简洁”和“空安全”的理念。在编写 API 调用逻辑时,它是我的首选。

,