本篇解析 example-select-03.kt。探讨 select 如何决定数据该发送给谁。
1. 核心操作:onSend
select 不仅可以监听接收,也可以监听发送。onSend 子句用于将一个元素发送到一个可用的通道中。
特点:
- 负载均衡:如果主通道正忙(缓冲区满),
select会尝试发送到备用通道。 - 多路分流:它能自动将产出的数据分流到第一个准备好接收的通道中。
2. 代码解析
1 | select<Unit> { |
- 执行逻辑:生产者产出一个数,如果消费者 1 慢,消费者 2 快,这个数就会被发送给消费者 2。
3. 开发者感悟
onSend 是处理“拥塞控制”的有力武器。在 Android 的网络上传场景下,如果你有两个上传接口(如 Wi-Fi 和 5G),你可以用 select 尝试先发给响应更快的那个,从而实现动态的链路负载均衡。