ticker
通过 time.NewTicker() 创建,这种类型 ticker 会不断的按照设定的间隔时间触发,除非主动终止运行。
ticker := time.NewTicker(time.Second * 1) // 运行时长
for range ticker.C {
fmt.Printf("ticker")
}
ticker := time.NewTicker(time.Second * 1) // 运行时长
ch := make(chan int)
go func() {
var x int
for x < 10 {
select {
case <-ticker.C:
x++
fmt.Printf("%d\n", x)
}
}
ticker.Stop()
ch <- 0
}()
<-ch // 通过通道阻塞,让任务可以执行完指定的次数。
timer
通过 time.NewTimer() 创建,这种类型,timer只会执行一次,当然,可以在执行完以后通过用 timer.Reset() 让定时器再次工作,并可以更改时间间隔。
tt := time.NewTimer(time.Second * 10)
<-tt.C
timer := time.NewTimer(time.Second * 1) // timer 只能按时触发一次,可通过Reset()重置后继续触发。
go func() {
var x int
for {
select {
case <-timer.C:
x++
fmt.Printf("%d,%s\n", x, time.Now().Format("2006-01-02 15:04:05"))
if x < 10 {
timer.Reset(time.Second * 2)
} else {
ch <- x
}
}
}
}()
<-ch
After
After()其实是timer的一个语法糖。
// 同步
<-time.After(time.Second * 4)
// 异步
time.AfterFunc(time.Second, func() {
fmt.Println("timer exit")
})