1 回答

TA貢獻1780條經(jīng)驗 獲得超4個贊
您可以使用 async.WaitGroup來管理您生成的 goroutine 的集合:Add(1)在生成每個新 goroutine 之前以及Done每個 goroutine 完成時調(diào)用。所以像這樣:
var wg sync.WaitGroup
inner := func(...) {
...
// Recurse in a new goroutine.
for _, recursionArgument := range ?some calculated data? {
wg.Add(1)
go inner(recursionArgument)
}
...
wg.Done()
}
wg.Add(1)
go inner(?initial values?)
現(xiàn)在等待wg會告訴你所有 goroutine 何時完成。
如果您正在從通道讀取結(jié)果,判斷何時沒有更多結(jié)果的明顯方法是關(guān)閉通道。你可以通過另一個 goroutine 來為我們做到這一點:
go func() {
wg.Wait()
close(resultsChannel)
}()
您現(xiàn)在應(yīng)該能夠簡單地range在resultsChannel閱讀所有的結(jié)果。
- 1 回答
- 0 關(guān)注
- 219 瀏覽
添加回答
舉報