time.After 在select-case中使用的正确姿势
来源:互联网 发布:算法导论22.4 2 编辑:程序博客网 时间:2024/05/22 06:46
前言
select 的语法如下所示
- 1
- 2
- 3
- 4
- 5
- 6
- 7
问题复现
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
根据条件5:如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。
但是运行上述代码,当ch通道中存在数据时,time.After总是得不到运行,因此到时超时未生效(就像是两个case都成立时,select 都”公平”地选择了 case <- ch,导致超时逻辑未生效)
改进1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
改进1 随机性失败
当case <- ch 和 case <- ticker.C 同时成立时,Select会随机公平地选出一个执行,有可能选择到前者,导致超时随机行失败
最终解决方式
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
将【超时】和【收包】放在各自单独的select里面,【超时】一定可以执行到
参考文档
go里面select-case和time.Ticker的使用注意事项
go语言time包用法
阅读全文
0 0
- time.After 在select-case中使用的正确姿势
- [golang]time.After 在select中使用的正确姿势(解决超时逻辑未生效bug)
- switch case正确的使用姿势——在代码之外的思考
- 在百度加固中正确使用ida的姿势
- swift中使用@noescape的正确姿势
- PHP中正确使用Json的姿势
- Swift中Delegate的正确使用姿势
- time.After()---select-case小测试一例
- go里面select-case和time.Ticker的使用注意事项
- go里面select-case和time.Ticker的使用注意事项
- 在Android中使用正确的姿势写一个string.xml
- 在java中正确使用PostgreSQL大对象和字节流类型的姿势
- 在国内使用npm install的正确姿势
- 使用Aliplayer在微信中播放视频的正确姿势
- 三张图读懂Greenplum在企业的正确使用姿势
- Fragment使用的正确姿势
- git 的正确使用姿势
- 使用libcurl的正确姿势
- Fiori2.0学习笔记-UI5 Demo Of FixFlex & Form
- onTextChanged使用详解
- Java 9 模块化(Modularity)
- MapReduce操作Hbase 进行单词数量统计Demo
- 从《王者荣耀》来聊聊游戏的帧同步
- time.After 在select-case中使用的正确姿势
- Scala 与Java 简单交互方式2
- List概述
- 一些Linux常用命令(学习笔记)
- 补SDUT-2482
- Unity3D绘制多条直线
- 批量删除redis特殊键值
- spring mvc 接收多个model
- kafka学习笔记(1)