围棋中的学习情境。我尝试了上下文取消,它尝试在取消后访问设置为上下文的值。令我惊讶的是,它奏效了:
import (
"context"
"fmt"
"time"
)
func test(ctx context.Context, cancelFunc context.CancelFunc){
intervalTicker := time.NewTicker(time.Second * 2).C
expiryTicker := time.NewTicker(time.Second * 5).C
for {
select {
case <-ctx.Done():
fmt.Println(ctx.Err())
return
case <-intervalTicker:
fmt.Println("interval")
case <-expiryTicker:
fmt.Println("expiry")
func() {
defer cancelFunc()
fmt.Println("Calling context cancel")
}()
return
}
}
}
func main() {
type key string
var contextKey key
parent := context.WithValue(context.TODO(), contextKey, "V1")
ctx, cancelFunc := context.WithCancel(parent)
test(ctx, cancelFunc)
fmt.Println(ctx.Value(contextKey))
}
当我将相同的子上下文和 cancel 函数传递给测试函数时,我本来希望上下文被取消并且值不可用。难道不是这样吗?
人到中年有点甜
白猪掌柜的
随时随地看视频慕课网APP
相关分类