3.1 go context代码示例
context.WithCancel返回两个有关联的对象,ctx与cancel,调用cancel发送一个空struct给ctx,ctx一旦接收到该对象后,就终止goroutine的执行;ctx是线程安全的,可以同时传递给多个goroutine,触发cancel时,取消所有goroutine的执行
package mainimport ("context""fmt""time" )func testContext(){ctx,cancel := context.WithCancel(context.Background())go d1(ctx)go d2(ctx)time.Sleep(7*time.Second)cancel() }func d1(ctx context.Context){i:=0for {time.Sleep(1*time.Second)i++select {case <- ctx.Done():fmt.Println("d1 over")returndefault:fmt.Println("d1 ",i)}} }func d2(ctx context.Context){fmt.Println("d2 start")<- ctx.Done()fmt.Println("d2 over") }func main(){testContext()fmt.Println("main over") }
输出
d2 start d1 1 d1 2 d1 3 d1 4 d1 5 d1 6 main over
context.WithTimeout
package mainimport ("fmt""context""time"
)func d1(ctx context.Context){i := 0for{time.Sleep(1*time.Second)select{case <- ctx.Done():fmt.Println("d1 over")returndefault:fmt.Println("d1:",i)}}
}func test(){ctx,cancel := context.WithTimeout(context.Background(),5*time.Second)go d1(ctx)fmt.Println("begin sleep 10 sec")time.Sleep(10*time.Second)fmt.Println("10 sec over")cancel()
}func main(){test()
}
[root@phoenix go]# go run cc.go
begin sleep 10 sec
d1: 0
d1: 0
d1: 0
d1: 0
d1 over
10 sec over
转载于:https://www.cnblogs.com/perfei/p/11529122.html
3.1 go context代码示例相关推荐
- 2021年大数据Flink(二十六):State代码示例
目录 State代码示例 Keyed State 官网代码示例 需求: 编码步骤 代码示例 Operator State 官网代码示例 需求: 编码步骤: 代码示例 State代码示例 Keyed S ...
- 【Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )
文章目录 一.task_struct 结构体 二.task_struct 结构体代码示例 一.task_struct 结构体 在 Linux 操作系统 中 , 进程 作为 调度的实体 , 需要将其抽象 ...
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )
文章目录 前言 一.Android 端完整代码示例 二.Flutter 端完整代码示例 三.相关资源 前言 前置博客 : [Flutter]Flutter 混合开发 ( Flutter 与 Nativ ...
- 【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )
文章目录 一.FutureBuilder 简介 二.处理 Flutter 中的中文乱码 三.完整代码示例 四.相关资源 一.FutureBuilder 简介 FutureBuilder 本质是组件 : ...
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )
文章目录 一.申请权限 二.申请权限原理对话框 三.引导用户手动设置权限对话框 四.在 AndroidManifest.xml 中配置权限 五.完整代码示例 六.GitHub 地址 一.申请权限 申请 ...
- 【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )
文章目录 一.GestureDetector 创建与设置 二.GestureDetector 触摸事件传递 三.触摸滑动操作 四.惯性滑动操作 五.长图滑动组件代码示例 六.运行效果 七.源码及资源下 ...
- 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )
文章目录 一.Google 官方 Bitmap 相关示例参考 二.磁盘缓存类 DiskLruCache 三.磁盘缓存初始化 四.存储数据到磁盘缓存中 五.从磁盘缓存中读取数据 六. Android 1 ...
- 【约束布局】ConstraintLayout 屏障 Barrier 约束 ( 简介 | 屏障适用场景 | 位置说明 | 相关属性 | 可视化操作 | 代码示例 | 总结 )
文章目录 I . 屏障 Barrier 约束 简介 II . 屏障线 Barrier 与 引导线 Guideline 对比 III . 屏障 Barrier 适用场景 IV . 屏障 Barrier ...
- 完整mes代码(含客户端和server端_Ice简介+Qt代码示例
一.ICE是什么? ICE是ZEROC的开源通讯协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通讯引擎,是一个面向对象的中间件,它封装并 ...
最新文章
- mysql修改默认编码为UTF8
- windows下 conda常用使用指令
- SAP特性,物料特性,批次特性建立的BAPI函數
- CG CTF RE Hello,RE!
- 怎么使用starwind部署iscsi_服务器配置我该怎么选
- Mysql:语法:标志符、关键字
- HTML一片空白, 无法渲染: Empty tag doesn't work in some browsers
- 圣诞收到最搞笑的短信两则
- 【层级多标签文本分类】MSML-BERT 模型的层级多标签文本分类方法研究
- bootstrap-table重载_Bootstrap Table的使用总结
- yolov3-tiny
- Slate轨道工具使用(一)—Track,Clip
- 学习Kruskal并用其解决洛谷P1195口袋的天空
- 九鼎实际控制人投资观!
- MySQLyog的使用
- CSP-S 2020 T1 P7075 儒略日
- 企业公众号内容规划:企业公众号做什么内容易传播分享?
- 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
- ff14 掉线 服务器维护,《FF14》29日更新维护 暂不推出手工补丁
- 高频射频计算机电缆,射频电缆是什么,它的作用又是什么
热门文章
- 比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国
- PWN-PRACTICE-BUUCTF-29
- ajax jsp模糊查询源码,Ajax动态执行模糊查询功能
- hive mysql windows_Java-从MySQL到Hive导入,其中MySQL在Windows上运行,而Hive在Cent OS上运行(Horton Sandbox)...
- php网页表格样式,HTML5制作表格样式
- 下载matlab安装包太慢_Matlab2017a软件安装包以及安装教程
- 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)
- 【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)
- linux bin su,linux – su:/ bin / bash:资源暂时不可用
- 计算机管理 内存在哪里看,教您win7怎么查看内存