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

在一个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. 浅析AngularJS自定义指令之嵌入(transclude)

    AngularJS自定义指令的嵌入功能与vue的插槽十分类似,都可以实现一些自定义内容展现.在开始之前先简单介绍下自定义指令的transclude属性和AngularJS的内置指令ng-transcl ...

  2. vsftpd中配置文件详解

    在vsftp服务器中,配置文件/etc/vsftpd/vsftpd.conf文件是配置的核心内容,其具体的配置信息详细情况如下: 1.默认配置: 1>允许匿名用户和本地用户登陆. anonymo ...

  3. Codeforces Round #530 (Div. 2)

    RANK :2252 题数 :3 补题: D - Sum in the tree 思路:贪心 把权值放在祖先节点上 ,预处理 每个节点保存 他与他儿子中 权值最小值即可. 最后会有一些叶子节点依旧为 ...

  4. 基于Ardalis.GuardClauses守卫组件的拓展

    在我们写程序的时候,经常会需要判断数据的是空值还是null值,基本上十个方法函数,八个要做这样的判断,因此我们很有必要拓展出来一个类来做监控,在这里我们使用一个简单地,可拓展的第三方组件:Ardali ...

  5. sudo passwd root输入普通用户密码后显示用户不再sudoers文件中

    在写上一篇VirtualBox创建共享文件夹的时候,在运行下图授权时,root密码一直输入错误 然后我就在终端输入 su root,却发现需要密码,但我却不知道密码是什么 于是我就在终端输入如下命令, ...

  6. chrome插件的开发

    基本目录:icon,manifest,html,js. chrome插件的使用,运行,打包. chrome浏览器打开扩展,勾选开发者模式,点击加载没打包的扩展,选中目录,加载插件. 右上角出现插件图标 ...

  7. SPOJ.TLE - Time Limit Exceeded(DP 高维前缀和)

    题目链接 \(Description\) 给定长为\(n\)的数组\(c_i\)和\(m\),求长为\(n\)的序列\(a_i\)个数,满足:\(c_i\not\mid a_i,\quad a_i\& ...

  8. 同步方法、同步代码块、volidate变量的使用

    当多个线程涉及到共享数据的时候,就会设计到线程安全的问题.非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”.发生脏读,就是取到的数据已经被其他的线程改过了. ...

  9. [P4995]跳跳!(贪心)

    这应该是我做过的最简单的洛谷月赛了 题意 给你n个高度,你的初始高度是0,现在要求你遍历每一个高度,每一次遍历耗费(hi−hj)2 的值 现在要你求耗费值最大 思路 真的是水…… 排序一下,求一下就好 ...

  10. sqlserver的like '%xxx%'优化,全文索引

    2000万行的数据表,首先对Address字段做'%xxx%'模糊查询 这是估计的查询计划 这是估计的实际查询结果,用了37秒才查询完成 还是之前的数据,但是这一次使用'xxx%'来做查询,现在还没有 ...