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代码示例相关推荐

  1. 2021年大数据Flink(二十六):​​​​​​​State代码示例

    目录 State代码示例 Keyed State 官网代码示例 需求: 编码步骤 代码示例 Operator State 官网代码示例 需求: 编码步骤: 代码示例 State代码示例 Keyed S ...

  2. 【Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )

    文章目录 一.task_struct 结构体 二.task_struct 结构体代码示例 一.task_struct 结构体 在 Linux 操作系统 中 , 进程 作为 调度的实体 , 需要将其抽象 ...

  3. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )

    文章目录 前言 一.Android 端完整代码示例 二.Flutter 端完整代码示例 三.相关资源 前言 前置博客 : [Flutter]Flutter 混合开发 ( Flutter 与 Nativ ...

  4. 【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )

    文章目录 一.FutureBuilder 简介 二.处理 Flutter 中的中文乱码 三.完整代码示例 四.相关资源 一.FutureBuilder 简介 FutureBuilder 本质是组件 : ...

  5. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 完整代码示例 | 申请权限 | 申请权限原理对话框 | 引导用户手动设置权限对话框 )

    文章目录 一.申请权限 二.申请权限原理对话框 三.引导用户手动设置权限对话框 四.在 AndroidManifest.xml 中配置权限 五.完整代码示例 六.GitHub 地址 一.申请权限 申请 ...

  6. 【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

    文章目录 一.GestureDetector 创建与设置 二.GestureDetector 触摸事件传递 三.触摸滑动操作 四.惯性滑动操作 五.长图滑动组件代码示例 六.运行效果 七.源码及资源下 ...

  7. 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )

    文章目录 一.Google 官方 Bitmap 相关示例参考 二.磁盘缓存类 DiskLruCache 三.磁盘缓存初始化 四.存储数据到磁盘缓存中 五.从磁盘缓存中读取数据 六. Android 1 ...

  8. 【约束布局】ConstraintLayout 屏障 Barrier 约束 ( 简介 | 屏障适用场景 | 位置说明 | 相关属性 | 可视化操作 | 代码示例 | 总结 )

    文章目录 I . 屏障 Barrier 约束 简介 II . 屏障线 Barrier 与 引导线 Guideline 对比 III . 屏障 Barrier 适用场景 IV . 屏障 Barrier ...

  9. 完整mes代码(含客户端和server端_Ice简介+Qt代码示例

    一.ICE是什么? ICE是ZEROC的开源通讯协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通讯引擎,是一个面向对象的中间件,它封装并 ...

最新文章

  1. mysql修改默认编码为UTF8
  2. windows下 conda常用使用指令
  3. SAP特性,物料特性,批次特性建立的BAPI函數
  4. CG CTF RE Hello,RE!
  5. 怎么使用starwind部署iscsi_服务器配置我该怎么选
  6. Mysql:语法:标志符、关键字
  7. HTML一片空白, 无法渲染: Empty tag doesn't work in some browsers
  8. 圣诞收到最搞笑的短信两则
  9. 【层级多标签文本分类】MSML-BERT 模型的层级多标签文本分类方法研究
  10. bootstrap-table重载_Bootstrap Table的使用总结
  11. yolov3-tiny
  12. Slate轨道工具使用(一)—Track,Clip
  13. 学习Kruskal并用其解决洛谷P1195口袋的天空
  14. 九鼎实际控制人投资观!
  15. MySQLyog的使用
  16. CSP-S 2020 T1 P7075 儒略日
  17. 企业公众号内容规划:企业公众号做什么内容易传播分享?
  18. 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!
  19. ff14 掉线 服务器维护,《FF14》29日更新维护 暂不推出手工补丁
  20. 高频射频计算机电缆,射频电缆是什么,它的作用又是什么

热门文章

  1. 比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国
  2. PWN-PRACTICE-BUUCTF-29
  3. ajax jsp模糊查询源码,Ajax动态执行模糊查询功能
  4. hive mysql windows_Java-从MySQL到Hive导入,其中MySQL在Windows上运行,而Hive在Cent OS上运行(Horton Sandbox)...
  5. php网页表格样式,HTML5制作表格样式
  6. 下载matlab安装包太慢_Matlab2017a软件安装包以及安装教程
  7. 【HDU - 5468】Puzzled Elena(容斥原理,dfs序,数学,素因子分解,有坑)
  8. 【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)
  9. linux bin su,linux – su:/ bin / bash:资源暂时不可用
  10. 计算机管理 内存在哪里看,教您win7怎么查看内存