首页 >后端开发 >Golang >如何在不取消传播的情况下克隆 Go 上下文?

如何在不取消传播的情况下克隆 Go 上下文?

Linda Hamilton
Linda Hamilton原创
2024-11-08 14:17:02604浏览

How to Clone a Go Context Without Cancel Propagation?

如何在不取消传播的情况下克隆 Go 上下文

在 Go 编程语言中,上下文。上下文在函数之间携带元数据和取消信号和 goroutine。但是,可能需要创建保留相同值但不继承原始取消状态的上下文副本。

用例:

当 HTTP 请求的上下文在将响应返回给客户端后被取消时,就会出现这种情况,但您需要在单独的 goroutine 中执行异步任务,该任务可能会比父 goroutine 的寿命更长

解决方案:

1.创建自定义上下文实现:

在 Go 1.21 之前,一种方法是创建自己的上下文。永远不会取消的上下文实现:

然后,您可以创建使用此实现的新上下文:

2。使用 WithoutCancel 函数 (Go 1.21 ):

从 Go 1.21 开始,上下文包包含一个 WithoutCancel 函数来简化此过程:

该函数返回一个新的上下文,与原始上下文共享相同的值,但不受

示例:

这样,即使请求上下文被取消,doSomethingElse 也会继续运行。

以上是如何在不取消传播的情况下克隆 Go 上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn