什么时候多快取消cancelFunc的golang子函数?

问题描述

我想访问Redis并同时在两台计算机上执行GET操作。我将使用得到的第一个结果并取消另一个呼叫。

我想知道的是cancelFunc()是立即中断go函数还是在它注意到信号之前是否等待特定事件发生。 documentation只是说:

调用CancelFunc会取消该子代及其子代,删除父代对该子代的引用,并停止所有关联的计时器。

这并不表示是否立即发生或是否需要达到特殊的取消点。

是否有关于该点的文档?

解决方法

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...