select超时优先级

LovesAsuna · · 3320 次点击
你的代码我愣是没看懂…… 正常for中的select至少会有个分支进行return,以退出这个处理循环。 如果你要超时后不继续读数据的话 至少应该是 ```go go func() { for { select { case <-delay: fmt.Println("超时") return case i := <-channel: fmt.Println(i) time.Sleep(time.Second) } } }() ```
#2
更多评论
我认为你的代码有2点问题: 第一,你的3秒超时效果并没有达到, 正确的用法是`tc := time.After(time.Second * 3); <-tc;delay <- 1` 第二, select那里, delay和channel都有数据的时候,select是随机选择一个执行,而不保证delay优先执行。你的channel是提前放入10个数据,实际运行的结果是不能保证到了超时就能打印“超时”
#1
不存在优先级吧,select 多个 case 同时满足的话,会随机触发一个
#3