看了下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秒内,死循环, 这样不影响吗
XXX 在处理业务。这只是在一个goroutine中这样处理而已,还有其他goroutine可以运行其他任务。go的并发方便之处不就是这样吗?