思路是把 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
}
}
标签:wg,WaitGroup,chan,sync,golang,超时,wait From: https://www.cnblogs.com/ed557/p/17233082.html