带超时的 sync.WaitGroup

最后更新于:2022-04-02 02:36:34

[TOC] ## 模块 ``` package wait import ( "sync" "time" ) type Wait struct { wg sync.WaitGroup } func (w *Wait)Add(delta int) { w.wg.Add(delta) } func (w *Wait)Done() { w.wg.Done() } func (w *Wait)Wait() { w.wg.Wait() } // return isTimeout func (w *Wait)WaitWithTimeout(timeout time.Duration)bool { c := make(chan bool) go func() { defer close(c) w.wg.Wait() c <- true }() select { case <-c: return false // completed normally case <-time.After(timeout): return true // timed out } } ```
';