Timer实现延迟执行
Timer 可以实现延时执行,和 time.Sleep
类似,但是前者可以通过关闭 Timer 取消阻塞。
NewTimer 创建一个新的 Timer,2 * time.Second
是设定需要等待的持续时间片段。然后它将提供一个用于通知的通道 timer.C
。
timer := time.NewTimer(2 * time.Second)
<-timer.C 会一直阻塞。除非 timer 被关闭。
Timer 可以实现延时执行,和 time.Sleep
类似,但是前者可以通过关闭 Timer 取消阻塞。
NewTimer 创建一个新的 Timer,2 * time.Second
是设定需要等待的持续时间片段。然后它将提供一个用于通知的通道 timer.C
。
timer := time.NewTimer(2 * time.Second)
<-timer.C 会一直阻塞。除非 timer 被关闭。
package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(2*time.Second)
timer2 := time.NewTimer(2*time.Second)
defer timer.Stop()
fmt.Println("start", time.Now())
go func() {
t := <-timer.C
fmt.Println("go", t)
}()
go func() {
t := <-timer2.C
fmt.Println("go2", t)
}()
fmt.Println("end", time.Now())
// 提前终止 timer2
if timer2.Stop() {
fmt.Println("Stop Timer 2")
}
// 等待携程执行
time.Sleep(3 * time.Second)
}
start 2021-11-19 11:18:04.491952 +0800 CST m=+0.000199876
end 2021-11-19 11:18:04.49217 +0800 CST m=+0.000417584
Stop Timer 2
go 2021-11-19 11:18:06.493336 +0800 CST m=+2.001604001