2 回答
TA贡献1824条经验 获得超6个赞
您必须在 goroutine 中检查上下文过期/取消:
go func(ctx context.Context) {
fmt.Println("LOTS OF WORK TIME..")
for i := 0; i < 1000; i++ {
select {
case <-ctx.Done():
return
default:
}
time.Sleep(1 * time.Second) // LOTS OF WORK
fmt.Println(i)
}
}(ctx)
TA贡献1820条经验 获得超2个赞
就像 Burak Serdar 所说,你必须检查 goroutine 中上下文的状态,但不仅仅是在 goroutine 开始时:你必须在 goroutine 中定期检查。
go func(ctx context.Context) {
for i := 0; i < 1000; i++ {
select {
case <-ctx.Done():
return
default:
// do some work
}
}
}(ctx)
一般来说,不应该从外部杀死一个 goroutine;它必须自己检查并意识到时间到了。
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报