选
等多个通道里第一个就绪的,返回其下标。
xuantie
设 fast = 道(1)
设 slow = 道(1)
设 idx = 选([fast, slow], 5000)你可以……
- 按下标分派——配
匹配判断是哪个通道就绪,超时走_:
xuantie
设 idx = 选([data, ctrl], 1000)
匹配 idx {
0 -> { 示("数据通道就绪") }
1 -> { 示("控制通道就绪") }
_ -> { 示("超时") }
}- 给单通道等待加超时——超时返回
-1:
xuantie
设 idx = 选([ch], 1000)
若 idx >= 0 {
示("收到: " & ch.收())
} 否 {
示("超时,重试...")
}- 非阻塞试探——超时给
0,立即返回:有货返下标,没货返-1:
xuantie
设 idx = 选([通道], 0)注意
选只告诉你「哪个通道就绪」,不替你取数据——拿到下标后自己收。- 返回可能晚于你给的超时毫秒:主线程等待期间会顺带驱动 fiber 调度器,若 fiber 里有长睡眠,等待会持续到它跑完一轮;超时到期仍未就绪才返回
-1。 选是挂起点:出现在循环体内会让整个异步块走线程池(路由规则同等待)。