func TestContext(t *testing.T){
message:=make(chan int,10)
//producer
for i:=0;i<10;i++{
message<-i
}
//consumer
ctx,cancel:=context.WithTimeout(context.Background(),time.Second*5)
go func(ctx context.Context) {
ticker := time.NewTicker(1 * time.Second)
for _ = range ticker.C {
select {
case <-ctx.Done():
fmt.Println("child process interrupt...")
return
default:
fmt.Printf("send message: %d\n", <-message)
}
}
}(ctx)
defer close(message)
defer cancel()
select{
case <-ctx.Done():
//time.Sleep(1*time.Second)
fmt.Println("main process exit!")
}
}
Q1:“延迟取消”什么时候执行?选择后?
Q2:Q1中,如果在select后执行“defer cancel”,ctx.Done()会返回nil吗?选择会被阻止吗?
呼如林
相关分类