1 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
你的循環(huán)中select有一個default分支。如果其他cases 都沒有準備好繼續(xù),default則立即執(zhí)行分支,因此您的下一次迭代立即開始而無需等待。這是一個繁忙的循環(huán)。
此外,不需要另一個 goroutine 終止,您可以在同一個 goroutine 中使用計時器。
例如:
func monitor() {
log.Info("Monitor started.")
ticker := time.NewTicker(35 * time.Second)
defer ticker.Stop()
timeoutCh := time.After(10 * time.Minute)
for {
select {
case t := <-ticker.C:
log.Infof("Subscribe to service at time %v\n", t)
if err := selfConn.SubscribeToService(); err != nil {
log.Errorf("Failed to subscribe to primary connector: %v", err)
}
case <-timeoutCh:
log.Info("Finished routine!")
return
}
}
}
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報