select 与 time.After 配合使用的问题
今天在工作中发现了一个有趣的现象。
在一个select中设定了两个定时器,本来预计哪个定时器到达就运行相应指令的,但是发现最终只有时间最短的定时器一直得到执行,其它定时器完全没有得到执行。
package main import (
"fmt"
"time"
) func main(){
for i:=; i< ;i ++ {
select{
case <-time.After(*time.Second):
fmt.Println("1 second") case <-time.After(*time.Second):
fmt.Println("8 seconds")
}
}
}
服务器输出是:
8 seconds
8 seconds
8 seconds 在stackoverflow上有人提到了,time.After每次都会返回一个新的channel,所以select不可能监测到新产生的channel:
https://stackoverflow.com/questions/39212333/how-can-i-use-time-after-and-default-in-golang
package main import (
"fmt"
"time"
) func main(){
count :=
timeout1 := time.After(*time.Second)
timeout2 := time.After(*time.Second)
for i:=; i< ; i++{
select{
case <-timeout1:
fmt.Println(count, "7 second") case <-timeout2:
fmt.Println(count, "5 seconds") default:
fmt.Println(count, "Just wait") }
count++
time.Sleep(*time.Second)
}
}
0 Just wait
1 Just wait
2 Just wait
3 Just wait
4 Just wait
5 5 seconds
6 Just wait
7 7 second
8 Just wait
9 Just wait
10 Just wait
11 Just wait
12 Just wait
13 Just wait
14 Just wait
15 Just wait
16 Just wait
17 Just wait
18 Just wait
19 Just wait
20 Just wait
21 Just wait
22 Just wait
23 Just wait
24 Just wait
25 Just wait
26 Just wait
27 Just wait
28 Just wait
29 Just wait
30 Just wait
31 Just wait
32 Just wait
33 Just wait
34 Just wait
35 Just wait
select 与 time.After 配合使用的问题的更多相关文章
- HTML知识点总结之表单元素
网页不可能是纯静态的,没有任何的交互功能:绝大多数的网站都有表单元素的使用.表单提供了一个浏览者和网站交互的途径,比如用户注册登录,用户留言等功能. form form元素只是一个数据获取元素的容器, ...
- Flink 的datastreamAPI 以及function函数的调用,性能调优
1 DataStreamAPI1.1 DataStream Data Sources source是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource ...
- HTML Forms(转)
内容来自HTML Dog:http://htmldog.com/guides/html/beginner/forms/ Forms Forms被用来收集用户的输入,它们通常被作为web应用的接口. 在 ...
- HTML的<form>表单标签
表单 HTML 表单用于搜集不同类型的用户输入. ㈠Form标签 ⑴form标签简介 在HTML中,如果创建一个表单,就把各种表单标签放在<form></form>标签内部.我 ...
- flink流处理从0到1
一.DataStream API之Data Sources(消费者之数据源) 介绍: source是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource ...
- HTML5总结整理
(仅供大家学习分享交流) 一.简介 1.前端开发最核心技术 我们知道,用所谓的网页三剑客已经不能满足需求了,那前端开发究竟要学习什么技术呢?网页最 主要由3部分组成:结构.表现和行为.网页现在新的标准 ...
- 最全的ORACLE-SQL笔记
-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...
- Matplotlib数据可视化(6):饼图与箱线图
In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...
- oracle 中 insert select 和 select insert 配合使用
Insert Into select 与 Select Into 哪个更快? 在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SEL ...
随机推荐
- 利用svg描边+css3实现边框逐渐消失小动画
首先简单的描述一下svg中两个属性: stroke-dasharray:表示每个虚线的长短. stroke-dashoffset:表示首个虚线的偏移量. 当两者都特别大的时候就会消失掉 直接上代码: ...
- Myeclipse10.0版下载
链接:http://pan.baidu.com/s/1kVl1kSf 密码:p6yr 主界面框图
- BZOJ.5339.[TJOI2018]教科书般的亵渎(拉格朗日插值) & 拉格朗日插值学习笔记
BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\ ...
- Eclipse纯净版安装web插件
打开 Help -> Install New Software. 在Install界面板中,点击Add按钮输入:然后在输入http://download.eclipse.org/releases ...
- [CF528D]Fuzzy Seach
Description: 有两个基因串S和T,他们只包含AGCT四种字符.现在你要找出T在S中出现了几次. 有一个门限值k≥0.T在S的第i(1≤i≤|S|-|T|+1)个位置中出现的条件如下:把T的 ...
- svn window下过滤文件(如配置文件等)
第一种: 在资源管理器中,右键一个未加入版本控制文件或目录,并从弹出菜单选择TortoiseSVN →Add to Ignore List,会出现一个子菜单,允许你仅选择该文件或者所有具有相同后缀的文 ...
- vivox23幻彩版手机怎么设置双击息屏
除了使用电源键来实现快速息屏方式外,我们还能通过双击屏幕的手势来息屏,下面小编就教大家vivox23幻彩版设置双击息屏的方法教程. vivox23幻彩版怎么设置双击息屏 第一步:打开vivox23幻彩 ...
- springboot拦截器@Autowired为null解决
问题原因 拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null 文件解决 在spring配置文件中这样写 @Bean public HandlerInterceptor ...
- androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法
与输入法设置冲突!!修改了就可以了.用的搜狗输入法,它的此快捷键也为简繁体替换.修改成其他的即可 null
- OpenCV3 for python3 学习笔记1
1.读/写图像文件 OpenCV的imread()函数和imwrite()函数能支持各种静态图像文件格式.不同系统支持的文件格式不一样,但都支持BMP格式,通常还应该支持PNG.JPEG和TIFF格式 ...