参见 gobyexample.com 的示例:https://gobyexample.com/timers
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 fired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
问题:停止计时器后
go func()
永远卡住了?如果是,处理这种情况的正确方法是什么?
如果计时器在触发之前停止,goroutine 将继续等待。您必须使用另一个通道或上下文来停止它:
done:=make(chan struct{})
go func() {
select {
case <-timer2.C:
fmt.Println("Timer 2 fired")
case <-done:
}
}()
stop2 := timer2.Stop()
close(done)