Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用cancelFunc()时,golang子函数何时(以多快的速度)被取消?_Go_Cancellation - Fatal编程技术网

调用cancelFunc()时,golang子函数何时(以多快的速度)被取消?

调用cancelFunc()时,golang子函数何时(以多快的速度)被取消?,go,cancellation,Go,Cancellation,我想访问Redis并同时在两台机器上进行访问。我将使用得到的第一个结果取消另一个呼叫 我想知道的是cancelFunc()是否会立即中断go函数,或者它是否会在注意到信号之前等待特定事件发生。法官说: 调用CancelFunc将取消子项及其子项,删除父项对子项的引用,并停止任何关联的计时器 这并不是说它是否立即发生或者是否需要达到一个特殊的取消点 关于这一点我遗漏了什么文档?取消上下文只会关闭它的Done频道,它不会“杀死”goroutine或类似的东西。在上下文下执行的代码必须执行select

我想访问Redis并同时在两台机器上进行访问。我将使用得到的第一个结果取消另一个呼叫

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

调用
CancelFunc
将取消子项及其子项,删除父项对子项的引用,并停止任何关联的计时器

这并不是说它是否立即发生或者是否需要达到一个特殊的取消点


关于这一点我遗漏了什么文档?

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


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

CancelFunc不会取消任何函数(您不能“取消”函数),它会取消上下文。你用它做什么取决于你。哈!可以在C语言中,这就像将
Done
标志设置为true,当这种情况发生时,您的代码可以执行
if(Done)返回。换句话说,接受上下文的应用程序需要积极主动,并尽可能经常地检查它是否应该尽快停止。@Alexiswillke或多或少,除了频道关闭是
select
able,这不是标志变量可以做的。:)