我有一个睡了一段时间的循环。但是,在我的代码中的其他地方,我可能需要提前结束睡眠时间,以便可以更快地执行后续逻辑。
for {
timer = time.NewTimer(30 * time.Second)
<-timer.C
// Do something
}
...别处
// Trigger timer
// timer.Trigger() ??
当然,timer.Stop()
会停止计时器,但会导致程序挂起而不会下降到// Do something
。目前,我正在将计时器重置为非常小的持续时间,以便计时器基本上立即到期。
timer.Reset(time.Millisecond)
有更好的方法吗?
答案 0 :(得分:2)
您可以使用取消频道:
cancel := make(chan struct{})
for {
timer = time.NewTimer(30 * time.Second)
select {
case <- timer.C:
doSomething()
case <- cancel:
doSomething()
}
}
如果您想忽略计时器并立即执行,只需在cancel
频道上发送消息:
cancel <- struct{}{}