码迷,mamicode.com
首页 > 其他好文 > 详细

Wait for a goroutine

时间:2017-04-03 17:51:57      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:阻塞   port   int   示例   log   背景   消息   没有   first   

在 Effective Go 中,介绍了一种 goroutine 与 channel 搭配使用的方法。

package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan string)
	
	go func() {
		time.Sleep(1000)
		fmt.Println("Go first!")
		c <- "done"
	}()
	
	fmt.Println("Go after.")
	fmt.Println("No waiting.")
	<-c
	fmt.Println("Wait for the first one.")
}

  

在这个示例中,使用 go func() {}() 相当于让一段代码在背景执行,我们不用等待它结束就可以继续执行下面的程序,因此,该程序的运行结果是最先打印 "Go after." 

如果不使用 channel 那么将会在最后才打印 "Go first!"

这里使用了 channel, 当遇到 <-c 时,程序就会被阻塞,需要等待消息发过来才能继续执行。

即,在打印完 "No waiting." 之后,等待消息,打印 "Go first!", 发送消息("done"),收到消息,打印 "Wait for the first one."

也就是说,可以通过使用 channel 来监视 goroutine 有没有结束。

Wait for a goroutine

标签:阻塞   port   int   示例   log   背景   消息   没有   first   

原文地址:http://www.cnblogs.com/ahui2017/p/6662401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!