我处于一个长时间运行的可取消函数中,该函数具有永远循环。
我需要检查上下文是否已关闭。
go func(){
for {
if ctx.Err() != nil { return }
// do work
}
}()
Run Code Online (Sandbox Code Playgroud)
与
go func(){
for {
select {
case <-ctx.Done():
return
default:
}
// do work
}
}()
Run Code Online (Sandbox Code Playgroud)
两者有区别吗?
我猜测检查 ctx.Err() 对于并发访问是安全的https://golang.org/src/context/context.go#L370所以它们看起来是相同的,给定一个封闭的上下文将始终设置 Err。
| 归档时间: |
|
| 查看次数: |
6207 次 |
| 最近记录: |