1 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
問題出在您的代碼中。
在您的第一個(gè)示例中,您正在創(chuàng)建一個(gè)股票代碼并將其用于超時(shí)。
在您的第二個(gè)示例中,您每次循環(huán)時(shí)都會(huì)創(chuàng)建一個(gè)計(jì)時(shí)器:
case <-time.After(maxDuration):
從庫(kù)源中可以看出,這相當(dāng)于
case <- time.NewTimer(maxDuration).C:
如果每次循環(huán)時(shí)都創(chuàng)建一個(gè)新的 Ticker/Timer(并丟棄舊的),它可能永遠(yuǎn)不會(huì)觸發(fā)。
因此,為了讓您的第二個(gè)示例正確運(yùn)行,請(qǐng)這樣做(未經(jīng)測(cè)試):
func fillChanTimeoutUsingTimeAfter(maxDuration time.Duration, chanSize int) chan string {
c := make(chan string, chanSize)
t := time.After(maxDuration)
for {
select {
case <-t:
fmt.Println("time.After:operation timedout")
return c
case c <- "Random message":
default:
fmt.Println("time.After:chan is full")
return c
}
}
}
- 1 回答
- 0 關(guān)注
- 235 瀏覽
添加回答
舉報(bào)