目录
Sleep
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
Goroutine
for{
fmt.Println(time.Now())
time.Sleep(time.Second*1)
}
Timer
Go<-chan Time
SleepTimer
fmt.Println(time.Now()) <-time.After(1*time.Second) fmt.Println(time.Now())
也可以把他拆分开,在任意地方进行等待
timer := time.NewTimer(1 * time.Second) <-timer.C fmt.Println(time.Now())
但是以上只是做到延迟一次性执行,我们来改造一下,把他变成定时器。
done := make(chan struct{})
timer := time.NewTimer(1 * time.Second)
go func() {
for {
select {
case <-timer.C:
fmt.Println(time.Now())
timer.Reset(1 * time.Second)
case <-done:
return
}
}
}()
<-time.After(5*time.Second + time.Millisecond*100)
done <- struct{}{}
GoroutinedoneGoroutinecasecasecaseReset
Ticker
TickerTimer
ticker := time.NewTicker(1 * time.Second)
go func() {
for {
<-ticker.C
fmt.Println(time.Now())
}
}()
<-time.After(5 * time.Second + time.Millisecond*100)
ticker.Stop()
timer.Stoptimer.Reset
小结
定时器一般用来周期性执行任务,比如定时同步数据、计算报表、发送通知。
time.SleepgoroutineTimerSleepchannelTickerTimer
您可能感兴趣的文章: