- context与任务取消
- 根context:通过context.Background()创建
- 子context:context.WithCancel(parentContext)创建
- ctx,cancel:=context.WithCancel(context.Background())
- 当前context被取消时 基于他的子context都会被取消
- 接收取消通知 <-ctx.Done()
func iscanceled(ctx context.Context) bool {
select {
case <-ctx.Done():
return true
default:
return false
}
}
func dowork() {
time.Sleep(time.Second)
}
func main() {
ctx, cancelfunc := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(i int, ctx context.Context) {
for {
if iscanceled(ctx) {
break
}
dowork()
}
fmt.Println(i, "canceled.")
}(i, ctx)
}
cancelfunc()
time.Sleep(time.Second * 2)
}