Golang time after典型用法

time after触发,例子:

package main
import ("fmt""time"
)
func main() {fmt.Println("Start Time =", time.Now())a := time.After(5*time.Second)fmt.Println(<-a)fmt.Println("End Start Time =", time.Now())
}

程序运行后,输出如下图所示:

我们看到,time After 在等待了 5 秒之后,返回了一个只读的 channel。因此,如果将 After() 放进 select 语句块的一个 case 中,那么就可以让其它的 case 有一定的时间长度来监听读、写事件。

如果在这段时长内其它 case 还没有有可读、可写事件,这个 After() 所在 case 就会结束当前的 select,然后终止 select (如果 select 未在循环中)或进入下一轮 select (如果 select 在循环中)。

time after设置超时,例子

package main
import ("fmt""time"
)
func main() {ch1 := make(chan string)// 激活一个goroutine,但5秒之后才发送数据go func() {time.Sleep(5 * time.Second)ch1 <- "put value into ch1"}()select {case val := <-ch1:fmt.Println("recv value from ch1:",val)return// 只等待3秒,然后就结束case <-time.After(3 * time.Second):fmt.Println("3 second over, timeover")}
}

程序运行后,输出如下图所示:

上面出现了超时现象,因为新激活的 goroutine 首先要等待 5 秒,然后才将数据发送到 channel ch1 中。但是 main goroutine 继续运行到 select 语句块,由于第一个 case 未满足条件(注意,main goroutine 并不会因此而阻塞)。

评估第二个 case 时,将执行 time.After() 等待 3 秒,3 秒之后读取到该函数返回的通道数据,于是该 case 满足 select 的条件,该 select 因为没有在循环中,所以直接结束,main goroutine 也因此而终止。自始至终,新激活的 goroutine都没有机会将数据发送到 ch1 中。

最新文章

  1. SQL Server事务
  2. 提升业务价值 APM应用与整合分享
  3. ChinaMM竞赛:VideoNet视频内容识别-总奖池10W人民币
  4. MongoDB Aggregation聚合操作
  5. PHP的图片等比缩放
  6. ae效果英文版翻译对照表_AE中英文对照
  7. 德保罗大学计算机科学专业,德保罗大学专业排名介绍
  8. JMS消息服务 API解析
  9. 转:稻盛和夫:在软弱的领导人手下工作,是可悲的
  10. Power and Modulo(思维)
  11. http POST请求键值对参数以及json参数
  12. 随机森林原始论文_【科普天地】2020年还需要阅读的10篇人工智能论文(附链接)...
  13. 【i.MX6ULL】驱动开发3——GPIO寄存器配置原理
  14. 项目管理必备,教你如何制作甘特图
  15. Eclipse启动加载工作空间突然闪退
  16. 安桌16进制变色列表和计算方法
  17. SpringMVC(三)——响应
  18. [BUUCTF]REVERSE解题记录 [MRCTF2020]Shit
  19. 365天挑战LeetCode1000题——Day 103 400题 检查二进制字符串字段 最大子序列交替和 最低票价 K 站中转内最便宜的航班
  20. oracle 同义词 synonym 创建与删除表

热门文章

  1. 程序员35岁压哨转行事业单位3年有感
  2. 学籍管理系统c语言,c语言学籍信息管理系统设计
  3. 我的读书笔记 -《人性的弱点》
  4. 安徽省《市民一卡通服务通则》
  5. ACM数论----秦九昭算法
  6. Tomcat 7.0安装与配置
  7. Linux基本命令(完整版-详解)
  8. SaaS 服务供应商Wynd获3170万美元B轮融资
  9. 大数据分析就业培训课程大纲分享
  10. 【Java 基础】字符串StringBuilder、StringBuffer,工具StringJoiner