首页 > 其他 > 详细

Go_Context

时间:2020-02-12 12:28:38      阅读:70      评论:0      收藏:0      [点我收藏+]

如何通知子goroutine退出?

1. 使用全局变量

package main

import (
	"fmt"
	"sync"
	"time"
)

// 为什么需要context?
var wg sync.WaitGroup
var notify bool

func f() {
	defer wg.Done()
	for {
		fmt.Println("==")
		time.Sleep(time.Millisecond * 500)
		if notify {
			break
		}
	}
}

func main() {
	wg.Add(1)
	go f()
	time.Sleep(time.Second * 5)
	// 如何通知子goroutine退出
	notify = true
	wg.Wait()

}

2. 使用chan

package main

import (
	"fmt"
	"sync"
	"time"
)

// 为什么需要context?
var wg sync.WaitGroup
var exitChan = make(chan bool, 1)

func f() {
	defer wg.Done()
FORLOOP:
	for {
		fmt.Println("周琳")
		time.Sleep(time.Millisecond * 500)
		select {
		case <-exitChan:
			break FORLOOP
		default:
		}
	}
}

func main() {

	wg.Add(1)
	go f()
	time.Sleep(time.Second * 5)
	// 如何通知子goroutine退出
	exitChan <- true
	wg.Wait()
}

  

Go_Context

原文:https://www.cnblogs.com/yzg-14/p/12298514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!