在文档中 有这样一句话 而通道接收<-time.After(d)操作将使当前协程进入阻塞状态。
如果协程阻塞在了case <-time.After(time.Second * 10) 这一行,那么for循环是不是应该停止了?等解除阻塞 for再进行下一轮循环? 但实际是:一旦ctx.Done这个channel中有数据,这个 case <-ctx.Done() 立马就执行了。
for {
select {
case <-ctx.Done():
fmt.Println(“Cancelled”, time.Now())
return
case <-time.After(time.Second * 10):
fmt.Println(“time.After done”, time.Now())
return
}
}
但是相反,time.Sleep 确实是将当前的协程阻塞了,time.Sleep执行不完,后面的都别想执行