1 回答
TA贡献1828条经验 获得超3个赞
你的循环中select有一个default分支。如果其他cases 都没有准备好继续,default则立即执行分支,因此您的下一次迭代立即开始而无需等待。这是一个繁忙的循环。
此外,不需要另一个 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 关注
- 132 浏览
添加回答
举报