go里面select case和time.Ticker的使用

结果如下:

问题出在这个select里面:

当两个case条件都满足的时候,运行时系统会通过一个伪随机的算法决定哪个case将会被执行,所以当tick.C条件满足的那个循环,有某种概率造成ch<-i没有发送(虽然通道两端没有阻塞,满足发送条件)

解决方案:

1: 再被随机到的tick.C里面多执行一次ch<-i

结果如下:

这样有个问题, 如果有多个case就不通用了,因为每个case下面都要去加一个,显得繁琐

2: 把tick.C的case单独放到一个select里面,并在其后面加入一个default,保证不阻塞

测试结果如下:

上述俩种都是希望得到的结果

你可能感兴趣的:(go里面select case和time.Ticker的使用)