gpt4 book ai didi

goroutine 泄漏上下文超时?

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:42 25 4
gpt4 key购买 nike

在下面的代码中,客户端将字符串放在服务的输入 channel 上,并在输出 channel 或错误 channel 上监听回复。

上下文设置了 5 毫秒超时。

func (s service) run() {
<-s.input

go func() {
select {
case <-s.ctx.Done():
s.errs <- errors.New("ctx done")
return
}
}()

time.Sleep(10 * time.Millisecond)
s.output <- 42
fmt.Println("run exit")
}

代码正确超时(由于 10ms sleep )并输出

error:  ctx done

但是,“run exit”永远不会打印出来。

问题:是否存在goroutine leak with processes stuck on

s.output <- 42

Go Playground例子

最佳答案

上下文有 5 毫秒的超时,你在这行 s.output <-42 之前睡了 10 毫秒运行。所以上下文首先超时并且发生错误,这是正确的,但看看main功能:

select {
case o := <-s.output:
fmt.Println("output: ", o)
case err := <-s.errs:
fmt.Println("error: ", err)
}

select声明已到达案例err := <-s.errs所以它会中断选择并转到 main 的末尾函数 => 程序退出即使s.output <- 42s.errs <- errors.New("ctx done")同时调用select中只有一个案例语句,如果你需要达到第二种情况,围绕 select 语句放置一个循环

关于goroutine 泄漏上下文超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com