【Duke】Context与任务取消 027 - PingPongGooo/GoFoundation GitHub Wiki
关联任务的取消
go 1.9以后 把 Context 内置到 go 的 包中
根 Context: 通过context.Background() 创建
子 Context:context.WithCancel(parentContext)创建
ctx,cancel := context.WithCancel(context.Background())
当前Context被取消时,基于他的子 context都会被取消
接收取消通知 <-ctx.Done()
package cancel_by_context
import (
"context"
"fmt"
"testing"
"time"
)
func isCancelled(ctx context.Context) bool {
select {
case <- ctx.Done():
return true
default:
return false
}
}
func TestCancel(t *testing.T) {
ctx,cancel := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(i int, ctx context.Context) {
for {
if isCancelled(ctx){
break
}
time.Sleep(time.Millisecond * 5)
}
fmt.Println(i, "Cancelled")
}(i, ctx)
}
cancel()
time.Sleep(time.Second * 1)
}