1 回答

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊
我建議你探索上下文包
可以這樣做:
func main() {
c := context.Background()
wg := &sync.WaitGroup{}
f(c, wg)
wg.Wait()
}
func f(c context.Context, wg *sync.WaitGroup) {
c, _ = context.WithTimeout(c, 3*time.Second)
wg.Add(1)
go func(c context.Context) {
defer wg.Done()
select {
case <-c.Done():
fmt.Println("f() Done:", c.Err())
return
case r := <-time.After(5 * time.Second):
fmt.Println("f():", r)
}
}(c)
}
基本上,您啟動一個基本上下文,然后從中派生其他上下文,當(dāng)一個上下文終止時,無論是通過傳遞時間還是調(diào)用其close,它都會關(guān)閉其Done通道和從它派生的所有上下文的Done通道.
- 1 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報