本篇解析 example-select-01.kt。探讨如何同时等待多个异步挂起函数。
1. 核心概念:select
select 表达式允许你同时等待多个挂起函数,并只响应第一个完成的任务。
特点:
- 多路复用:它可以同时监听多个
Channel。 - 偏好机制:如果多个子句同时准备就绪,
select通常会优先选择第一个。
2. 代码解析 (FizzBuzz 案例)
两个生产者分别以 500ms (fizz) 和 1000ms (buzz) 的频率产出数据。
1 | select<Unit> { |
- 执行逻辑:无论哪个通道先发来消息,
select都会立即执行对应的代码块并结束本次选择。
3. 开发者感悟
select 就像是赛跑的裁判,谁先过终点线就判定谁赢,并立即结束比赛。在 Android 中,如果你从两个不同的服务器请求同一个数据,你可以用 select 来取最先返回的那个,从而提升用户体验。