Интересно, почему нам нужно запустить wg.Wait()
в goroutine
Go WaitGroup с goroutine
// This one works as expected...
func main() {
var wg sync.WaitGroup
for i:=0; i<5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
}()
time.Sleep(time.Second)
}
go func() {
wg.Wait()
}()
}
в Но это один никогда не заканчивается ждать вечно
func main() {
var wg sync.WaitGroup
for i:=0; i<5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
}()
time.Sleep(time.Second)
}
wg.Wait()
}
Может кто-нибудь объяснить, почему я должен ждать в другом goroutine ?
Спасибо!
Уверены ли вы? Я бы предположил, что что-то сломано в не показанной части кода, тем более, что первая версия не ждет ИМХО. – Volker
Мой код на самом деле делает намного больше, и он снова использует свои собственные goroutines. Я получаю этот шаблон от https://github.com/rakyll/coop/blob/master/coop.go#L85 –
Здесь она выполняет 'wg.Wait()' в goroutine. –