以下代码,逻辑上的执行结果 应该是:
1
2
3
...
exit...
但是名实际上是:
1
exit...
为什么会这样呢
14 ctx := context.Background()
15 ctx1, cannel := context.WithTimeout(ctx, times)
16
17 go func(ctx context.Context) {
18 count := 1
19 for {
20 select {
21 case <-ctx.Done():
22 fmt.Println("exit....")
23 return
24 default:
25 fmt.Println(count)
26 count++
27 time.Sleep(times * 10)
28 }
29 }
30 }(ctx1)
31
32 time.Sleep(time.Second * 3)
33 cannel()
看你代码,变量 `times` 表示的是100ms, 你上面有有一个`context.withTimeout`会在100ms发出一个信号,这个 `ctx.done`就执行到了
#5
更多评论
你代码 `times` 变量是多久?`<-ctx.Done():` 是接收超时的信号; 但是你的 `default: time.Sleep(times * 10)` 阻塞住代码了,正常只会输出 1 然后超时退出了。
#2