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