golang ctx cancel用法

看了下grpc源码, 里面的超时用法正常是
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

defer cancel()

然后

done := make(chan struct{})
go func() {
    ls.ReportTo(ctx, cc)
    close(done)
}()

在ReportTo里面的实现

for {
    select {
    case <-ctx.Done():
        return
    default:
    }
    XXX // 业务
}

这样来用, 这边的for循环是死循环了吧, 在取消的这10秒内,死循环, 这样不影响吗

阅读 5.2k
2 个回答

XXX 在处理业务。这只是在一个goroutine中这样处理而已,还有其他goroutine可以运行其他任务。go的并发方便之处不就是这样吗?

是死循环。资源占用很轻的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题