本篇解析 example-select-04.kt。探讨如何获取一组并发任务中最快返回的那个结果。
1. 核心操作:onAwait
select 可以用于监听 Deferred 对象的完成。
特点:
- 非阻塞等待:当有多个并发的
async任务时,谁先返回,就执行谁的onAwait代码块。 - 自动忽略其他:一旦其中一个任务返回并被选中,其余的任务依然在后台运行,但它们的结果在本次
select中会被忽略。
2. 代码解析
1 | val list = asyncStringsList() // 启动 12 个随机延迟的 async 任务 |
3. 开发者感悟
onAwait 配合 select 是处理“多源竞争”的最佳实践。在 Android 中,如果你从缓存(磁盘)和网络同时拉取数据,你可以通过这种方式展示“最快到达”的数据,显著缩短用户的等待感。