package main
//context是线程安全的,那么可以传进任意goroutine里面,假如有多个这样的goroutine,那么cancel就是一个总开关,可以一口气把多个goroutine停掉
import (
"context"//上下文
"log"
"os"
"time"
)
var logg *log.Logger
var ctx, cancel = context.WithCancel(context.Background())
func someHandler() {//可以作为103的起始
go doStuff(ctx)
go doStuff(ctx)
//10秒后取消doStuff
time.Sleep(10 * time.Second)
}
//每1秒work一下,同时会判断ctx是否被取消了,如果是就退出
func doStuff(ctx context.Context) {
for {
time.Sleep(1 * time.Second)
select {
case <-ctx.Done():
logg.Printf("done")
return
default:
logg.Printf("work")
}
}
}
func main() {
logg = log.New(os.Stdout, "", log.Ltime)
someHandler()
logg.Printf("111111")
cancel()
for ; ; {
time.Sleep(10*time.Second)
}
}
context将协程全部关闭
猜你喜欢
转载自blog.csdn.net/weixin_42544051/article/details/87935269
今日推荐
周排行