问题描述
我想访问Redis并同时在两台计算机上执行GET操作。我将使用得到的第一个结果并取消另一个呼叫。
我想知道的是cancelFunc()
是立即中断go函数还是在它注意到信号之前是否等待特定事件发生。 documentation只是说:
这并不表示是否立即发生或是否需要达到特殊的取消点。
是否有关于该点的文档?
解决方法
取消上下文仅会关闭其Done
通道,它不会“杀死” goroutine或类似的东西。在上下文中执行的代码必须执行select
来注意Done
通道的关闭,并放弃正在执行的任何工作。
但是,在许多情况下,这项工作已经为您完成。如果您用于发出请求的redis客户端方法接受上下文,则可以安全地假设,如果该上下文被取消,则客户端将处理取消操作,并且该方法将立即返回错误context.Canceled
-所有您需要做的是通过退出正在执行的操作来处理该错误。