importcjj / notes

My notes
10 stars 1 forks source link

Golang中如何简便的关闭多个等待的goroutine #11

Open importcjj opened 6 years ago

importcjj commented 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()
}
importcjj commented 6 years ago

很基础的一个技巧