Go语言并发编程---context

package main

import (
"context"
"log"
"os"
"time"
"fmt"
)

var logg *log.Logger

func someHandler() {
ctx, cancel := context.WithCancel(context.Background())
go doStuff(ctx)

//10秒后取消doStuff
time.Sleep(10 * time.Second)
cancel()
//保持主进程不退出
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", ctx.Err())
return
default:
logg.Printf("work")
}
}
}

func main() {
logg = log.New(os.Stdout, "", log.Ltime)
someHandler()
logg.Printf("down")
}

posted @ 2018-02-24 08:11  amongv587  阅读(128)  评论(0编辑  收藏  举报