问题内容 func main() { rand.Seed(time.Now().Unix()) ctx, cancelFunc := context.WithCance
func main() {
rand.Seed(time.Now().Unix())
ctx, cancelFunc := context.WithCancel(context.Background())
anies := make(chan any)
Go doSomething(ctx, anies)
intn := rand.Intn(2)
if intn == 0 { //BRANCH1
cancelFunc()
close(anies)
}
time.Sleep(time.Second)
}
func doSomething(ctx context.Context, anies chan any) {
for {
if ctx.Err() == nil { //LINE2
anies <- 1 //LINE3
}
}
}
有没有可能,当 branch1 发生在 line2 和 line3 之间时,我会感到恐慌。
是的,恐慌是可能的。以下是发生恐慌的时间线示例。这些行按时间递增顺序排列。 N: 前缀代表 goroutine。
1:启动协程2
2:调用ctx.Err(),它返回nil
1:调用cancelFunc()
1:关闭通道anis
2:发送到aniy频道。恐慌,因为通道已关闭。
以上就是这里可能会出现恐慌吗?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 这里可能会出现恐慌吗?
本文链接: https://lsjlt.com/news/561067.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0