问题:
您正在构建一个处理多个 HTTP 调用的工具在并发 goroutine 中。为了防止无限期执行的情况,您寻求一种在特定时间间隔后取消 goroutine 的方法。
解决方案:
同时创建 goroutine 休眠的方法在指定的持续时间内发送广播消息来取消其他 goroutine 似乎是合乎逻辑的,但此中 goroutine 的执行似乎存在问题scene.
为了应对这一挑战,请考虑利用 Go 中的上下文包。它提供了一种有效的方法来处理 goroutine 的超时和上下文取消。
代码片段:
下面是一个使用 context 包进行 goroutine 超时管理的示例:
package main import ( "context" "fmt" "time" ) func test(ctx context.Context) { t := time.Now() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): fmt.Println("cancelled") } fmt.Println("used:", time.Since(t)) } func main() { ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) go test(ctx) // cancel context after 30 milliseconds time.Sleep(30 * time.Millisecond) cancel() }
此代码创建一个超时时间为 50 毫秒的上下文。然后启动一个 goroutine 来执行测试函数,并传递上下文。在测试函数中,选择语句等待超时发生或上下文被取消。 30 毫秒后,上下文被取消,导致 goroutine 完成并打印“cancelled”。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3