Err 如果Done返回的channel没有关闭,将返回nil;如果Done返回的channel已经关闭,将返回非空的值表示任务结束的原因 。如果是context被取消,Err将返回Canceled;如果是context超时 , Err将返回DeadlineExceeded 。
Value 返回context存储的键值对中当前key对应的值,如果没有对应的key,则返回nil 。
可以看到Done方法返回的channel正是用来传递结束信号以抢占并中断当前任务;Deadline方法指示一段时间后当前goroutine是否会被取消;以及一个Err方法,来解释goroutine被取消的原因;而Value则用于获取特定于当前任务树的额外信息 。而context所包含的额外信息键值对是如何存储的呢?其实可以想象一颗树,树的每个节点可能携带一组键值对,如果当前节点上无法找到key所对应的值,就会向上去父节点里找,直到根节点 。
emptyCtx
emptyCtx是一个int类型的变量,但实现了context的接口 。emptyCtx没有超时时间,不能取消,也不能存储任何额外信息,所以emptyCtx用来作为context树的根节点 。
Background和TODO只是用于不同场景下: Background通常被用于主函数、初始化以及测试中,作为一个顶层的context,也就是说一般我们创建的context都是基于Background;而TODO是在不确定使用什么context的时候才会使用 。
用法 :
关于go语言信号和go语言信号抢占的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 美国家庭ip服务器怎么设置,设置美国的ip地址
- 安卓相机开发教程2麻将,安卓dazz相机
- 天府银行微信公众号粉丝数,天府银行vip
- 国产单机海底解谜游戏大全,海底类单机游戏
- vb.net浏览器兼容 支持vbscript的浏览器
- 电脑音频学什么,电脑音频学什么好
- 支持exec虚拟主机,zkeys虚拟主机
- word左右空白如何删除,文档左右空白处叫什么
- vb.net操作reg vbnet rnd