GO-优雅等待所有子协程结束
LDK Lv4

为什么要等待子协程结束

可能是因为cpp写多了(bushi。众所周知,在cpp中,有thread.join()可以等待线程结束。但是GO中的协程没有这类API,所以就有了这个问题。主要平时写demo程序时,总是需要等待子协程结束才能完成看出来协程的调度顺序。不然就会出现下面这种情况:

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
)

func main(){
go sayHi(){
fmt.Println("say hello......")
}()
fmt.Println("main groutine....")
}

上面程序的输出只有:

1
main groutine....

很简单,main协程跑太快了,子协程还没来得及Print,main协程就已经结束了,子协程也跟着结束了。

下面就是正文:如何让子协程顺利执行完。

通道

WaitGroup类型

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 74.8k 访客数 访问量