其他分享
首页 > 其他分享> > golang context example

golang context example

作者:互联网

package main

import (
	"context"
	"fmt"
	"time"
)

func timeoutHandler() {
	// 创建继承Background的子节点Context
	ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
	go doSth(ctx)

	//模拟程序运行 - Sleep 10秒,实际是在主程序中 sleep
	time.Sleep(10 * time.Second)
	cancel() // 3秒后将提前取消 doSth goroutine
}

//每1秒work一下,同时会判断ctx是否被取消,如果是就退出
func doSth(ctx context.Context) {
	var i = 1
	for {
		time.Sleep(1 * time.Second)
		select {
		//还是依靠管道
		case <-ctx.Done():
			fmt.Println("done")
			return
		default:
			fmt.Printf("work %d seconds: \n", i)
		}
		i++
	}
}

func main() {
	fmt.Println("start...")
	timeoutHandler()
	fmt.Println("end.")
}

  

...

golang context 

超时

 

标签:doSth,ctx,golang,Second,Sleep,context,time,example
来源: https://www.cnblogs.com/eiguleo/p/14241853.html