context包的withTimeout, withCancel之类的具体实用价值是啥大佬们有什么好的建议?

父级context定义了context,传入到子级比如funca(){
b,cancel:=context.WithTimeout(context.BackGround(),time.Second())
cc(b)
}
funccc(ctxcontext.Context){
select{
case<-ctx.Done:
return
}
}
必须要在子集里面监听才能退出子集?那我感觉这样的场景貌似也没多大用啊,每个子集里面都要监听挺麻烦的,或者能举个场景例子么?这个超时或者取消的用处提现
慕森王
浏览 288回答 2
2回答

哈士奇WWW

context的这个使用,在web编程里比较常见。具体的一个应用:比如存在一个微服务集合,其中对外的一个api接口(假设为A)依赖其他几个微服务(假设为B和C)提供的服务;如果我们调用了A的接口,那么服务A会调用B和C的接口。如果这个时候我们调用A接口的动作终止了(比如我们主动放弃api的调用,但是这个时候A还在继续调用B和C,那么怎么通知A放弃对B和C的调用呢?这个时候context的一些特定就用上了。再描述一个例子:web应用中会使用到数据库,启动web应用的时候会创建数据库的连接池,当我们的web应用退出(重启、升级)时,为了避免数据库连接泄露,应该提前把数据库的连接池释放掉,这个时候也可以通过context来传递信息。

犯罪嫌疑人X

楼上答主描述的已经非常好了,但好像题主是不了解Context该怎么写。之前我翻译过官方的一篇博文,context,如果想看看官方原文,文中有链接,文章中有个案例可以仔细阅读下。另外,如果对Go的并发不够了解,建议看看官方的另一篇文章,我的翻译。context一般主要是用于服务类程序的编写,比如http服务,可以读读类似框架的源码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript