为了账号安全,请及时绑定邮箱和手机立即绑定

调用 cancelFunc() 时(多快)取消 golang 子函数?

调用 cancelFunc() 时(多快)取消 golang 子函数?

Go
牛魔王的故事 2022-06-27 10:40:05
我想同时访问 Redis 并在两台机器上执行GET。我将使用我得到的第一个结果并取消另一个呼叫。我想知道的是是否cancelFunc()立即中断 go 函数,或者它是否会在注意到信号之前等待特定事件发生。文档只是说:调用CancelFunc取消子项及其子项,删除父项对子项的引用,并停止任何关联的计时器。这并没有说明它是立即发生还是需要达到特殊的取消点。我错过了关于那个特定点的任何文件?
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

取消上下文只是关闭它的Done通道,它不会“杀死”一个 goroutine 或类似的东西。在上下文中执行的代码select必须注意通道的关闭Done并放弃它正在做的任何工作。

但是,在许多情况下,这项工作已经为您完成。如果您用于发出请求的 redis 客户端方法接受一个上下文,那么可以安全地假设如果该上下文被取消,客户端将处理取消并且该方法将立即返回一个错误context.Canceled- 您需要做的就是通过退出您正在做的事情来处理该错误。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信