ed557

学习笔记

golang  实现 sync.WaitGroup wait() 方法 超时 自动释放

思路是把 wg.wait() 放到一个协程里,通过chan向外发送完成信号。 外层通过一个select超时结构来控制最大超时时间。

func waitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool {
    c := make(chan struct{})
    go func() {
        defer close(c)
        wg.Wait()
    }()
    select {
    case <-c:
        return false // completed normally
    case <-time.After(timeout):
        return true // timed out
    }
}

 

posted on 2023-03-19 14:55  ed557  阅读(783)  评论(0编辑  收藏  举报

导航