如何在不取消传播的情况下克隆 Go 上下文
在 Go 编程语言中,上下文。上下文在函数之间携带元数据和取消信号和 goroutine。但是,可能需要创建保留相同值但不继承原始取消状态的上下文副本。
用例:
当 HTTP 请求的上下文在将响应返回给客户端后被取消时,就会出现这种情况,但您需要在单独的 goroutine 中执行异步任务,该任务可能会比父 goroutine 的寿命更长
解决方案:
1.创建自定义上下文实现:
在 Go 1.21 之前,一种方法是创建自己的上下文。永远不会取消的上下文实现:
然后,您可以创建使用此实现的新上下文:
2。使用 WithoutCancel 函数 (Go 1.21 ):
从 Go 1.21 开始,上下文包包含一个 WithoutCancel 函数来简化此过程:
该函数返回一个新的上下文,与原始上下文共享相同的值,但不受
示例:
这样,即使请求上下文被取消,doSomethingElse 也会继续运行。
以上是如何在不取消传播的情况下克隆 Go 上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!