本篇解析 example-cancel-08.kt,介绍一种更温和的超时处理方式.
1. 核心构建器:withTimeoutOrNull
相比于 withTimeout 会抛出异常,withTimeoutOrNull 在超时发生时会返回 null。
代码解析
1 | val result = withTimeoutOrNull(1300L) { |
- 由于 1300ms 后任务被自动取消,块内的 “Done” 无法被返回。
result最终被赋值为null。
2. 为什么使用它?
在很多业务场景下,超时是一个预期内的情况,而不是一个“程序错误”。
- 例如:尝试请求网络数据,如果 3 秒没返回就显示缓存。
- 使用
withTimeoutOrNull可以省去繁琐的try-catch模板代码,让逻辑更简洁。
3. 开发者感悟
withTimeoutOrNull 是协程库提供的一个非常人性化的设计。它体现了 Kotlin 追求“代码简洁”和“空安全”的理念。在编写 API 调用逻辑时,它是我的首选。