代码
```go
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 400*time.Millisecond)
defer cancel()
go handle(ctx, 1500*time.Millisecond)
fmt.Println("ab........")
select {
case <-ctx.Done():
fmt.Println("main", ctx.Err())
}
}
func handle(ctx context.Context, duration time.Duration) {
fmt.Println("a......")
select {
case <-ctx.Done():
fmt.Println("handle", ctx.Err())
case <-time.After(duration):
fmt.Println("process request with", duration)
}
}
```
测试的结果是
```go
1
main context deadline exceeded
2
main context deadline exceeded
handle context deadline exceeded
3
handle context deadline exceeded
main context deadline exceeded
```
请教, 什么原因导致的这3种结果?涉及到哪些知识点?
主要是语句之间执行的时间顺序不同
第一个,main协程在handle协程执行之前先执行完成
第二个,handle协程超时,main协程select中打印,handle协程select中打印,最后defer
第三个,handle协程超时,handle协程select中打印,main协程select中打印,最后defer
#1