Open importcjj opened 6 years ago
经常有这样的需求 例如写了一个server, 然后新启了非常多的goroutine执行阻塞任务,如何让这许多goroutine在我们关闭server时也能优雅的结束呢?
使用一个channel即可, 一个非常简单的例子
package main import ( "sync" ) func main() { var wg sync.WaitGroup var closeQ = make(chan struct{}) for i := 0; i < 10; i++ { wg.Add(1) go func(workerid int) { <-closeQ println(workerid, "quit") wg.Done() }(i) } close(closeQ) wg.Wait() }
很基础的一个技巧
经常有这样的需求 例如写了一个server, 然后新启了非常多的goroutine执行阻塞任务,如何让这许多goroutine在我们关闭server时也能优雅的结束呢?
使用一个channel即可, 一个非常简单的例子