今天在工作中发现了一个有趣的现象。

在一个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 配合使用的问题的更多相关文章

  1. HTML知识点总结之表单元素

    网页不可能是纯静态的,没有任何的交互功能:绝大多数的网站都有表单元素的使用.表单提供了一个浏览者和网站交互的途径,比如用户注册登录,用户留言等功能. form form元素只是一个数据获取元素的容器, ...

  2. Flink 的datastreamAPI 以及function函数的调用,性能调优

    1 DataStreamAPI1.1 DataStream Data Sources source是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource ...

  3. HTML Forms(转)

    内容来自HTML Dog:http://htmldog.com/guides/html/beginner/forms/ Forms Forms被用来收集用户的输入,它们通常被作为web应用的接口. 在 ...

  4. HTML的<form>表单标签

    表单 HTML 表单用于搜集不同类型的用户输入. ㈠Form标签 ⑴form标签简介 在HTML中,如果创建一个表单,就把各种表单标签放在<form></form>标签内部.我 ...

  5. flink流处理从0到1

    一.DataStream API之Data Sources(消费者之数据源) 介绍: source是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource ...

  6. HTML5总结整理

    (仅供大家学习分享交流) 一.简介 1.前端开发最核心技术 我们知道,用所谓的网页三剑客已经不能满足需求了,那前端开发究竟要学习什么技术呢?网页最 主要由3部分组成:结构.表现和行为.网页现在新的标准 ...

  7. 最全的ORACLE-SQL笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...

  8. Matplotlib数据可视化(6):饼图与箱线图

    In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...

  9. oracle 中 insert select 和 select insert 配合使用

    Insert Into select 与 Select Into 哪个更快? 在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SEL ...

随机推荐

  1. SpringBoot整合dubbo

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 以上介绍来源于百度百科,具体dubbo相关可以自行查 ...

  2. 潭州课堂25班:Ph201805201 django 项目 第十五课 用户注册功能后台实现 (课堂笔记)

    前台:判断用户输入 ,确认密码,手机号, 一切通过后向后台发送请求, 请求方式:post 在 suers 应用下的视图中: 1,创建个类, 2,创建 GET 方法,宣言页面 3,创建  POST 方法 ...

  3. 潭州课堂25班:Ph201805201 django 项目 第五课 静态页面转为模板 (课堂笔记)

    一.分析静态页面   1.静态vs动态 条目 静态页面 动态页面 网站内容 固定不变 经常变动 浏览器加载速度 更快(无需向服务器发起请求) 更慢 改变网站内容 很难(修改或者创建新的html页面) ...

  4. [CSAcademy]Virus on a Tree

    [CSAcademy]Virus on a Tree 题目大意: 给你一棵\(n(n\le10^5)\)个点的树,一开始点\(1\)有病毒,可以沿着边扩散.你可以事先切掉若干条边,使得病毒扩散不超过\ ...

  5. IDEA中maven模块变成灰色

    可能该模块被忽略,解决办法:

  6. 谈谈canvas的性能优化(主要讲缓存问题)

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! canvas玩多了后,就会自动的要开始考虑性能问题了.怎么优化canvas的动画呢? [使用缓存] 使用缓存也就是用离屏canvas进行预 ...

  7. [P3625][APIO2009]采油区域 (前缀和)

    这道题用二维前缀和可以做 难度还不算高,细节需要注意 调试了很久…… 主要是细节太多了 #include<bits/stdc++.h> using namespace std; #defi ...

  8. Flask特殊装饰器

    @app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...

  9. 深入理解JVM(3)——垃圾收集策略详解

    Java虚拟机的内存模型分为五部分:程序计数器.Java虚拟机栈.本地方法栈.堆.方法区. 程序计数器.Java虚拟机栈.本地方法栈都是线程私有的,也就是每个线程都拥有这三个区域,而且这三个区域会随着 ...

  10. 出现明明SQL语句没问题,但是却无法通过代码查询到结果的问题。

    问题:SQL语句查询不到记录,导致空指针异常 SQL语句: select * from mixinfo where infotype='网站简介' 代码: publicList<HashMap& ...