select 执行问题

power2021 · · 1015 次点击
```go package main import ( "context" "fmt" "time" ) func main() { done := make(chan struct{}) ctx, cancel := context.WithCancel(context.Background()) go func() { count := 1 for { select { case <-ctx.Done(): fmt.Println("exit...") done <- struct{}{} return default: fmt.Println(count) count++ time.Sleep(1 * time.Second) } } }() time.Sleep(3 * time.Second) cancel() <-done } ```
#6
更多评论
为了你初五就提问题点赞
#1
你代码 `times` 变量是多久?`<-ctx.Done():` 是接收超时的信号; 但是你的 `default: time.Sleep(times * 10)` 阻塞住代码了,正常只会输出 1 然后超时退出了。
#2