1 回答

TA貢獻(xiàn)1853條經(jīng)驗 獲得超9個贊
這段代碼有很多問題,主要是使用for/的緊密循環(huán)select可能不允許其他 goroutine 在通道上發(fā)送。由于default箱子是空的并且select只有一個,因此不需要case整個箱子。select以下代碼可以正確運行:
backOffChan := make(chan struct{})
go func() {
time.Sleep(1 * time.Millisecond)
backOffChan <- struct{}{}
}()
for range backOffChan {
d := time.Duration(10 * time.Millisecond)
log.Printf("reconnecting in %s", d)
select {
case <-time.After(d):
log.Printf("reconnected after %s", d)
return
}
}
這將等到backOffChan收到消息而不燒緊循環(huán)。
(請注意,此代碼還解決了使用log.Println格式化指令的問題 - 這些問題已更正為log.Printf)。
在這里查看它的實際效果:https ://play.golang.org/p/ksAzOq5ekrm
- 1 回答
- 0 關(guān)注
- 104 瀏覽
添加回答
舉報