原文链接:https://www.ahaoaha.top/2019/05/28/Golang中的定时任务/
Timer
设置定时器,经过duration时间,Timer会被触发,Timer被触发之后,调用Reset函数,重新设置定时器,再经过duration的时间,Timer会被再次触发。
使用方式
- 通过
AfterFunc
返回Timer对象,AfterFunc
被调用之后,再计时结束之后,对应的函数只会被调用一次,如果想让计时器重新生效,则需要通过对象调用Reset
。 - 通过
NewTimer
可以创建出Timer对象。
Ticker
设置周期定时器,每间隔duration时间,会将当前的时间发送到chan中,读端可以从chan中读取到到当前的时间。
使用方式
- 通过
NewTicker
可以创建Ticker对象,通过对象调用Stop
方法可以停止当前Ticker对象运行,但是并不会关闭chan。
Timer和Ticker的区别
- Ticker完成定义,从当前时刻开始计时,每个固定时间都会被触发;Timer定时器只会被触发一次
- Ticker在不使用时,应该手动Stop,如果不Stop可能会造成资源的泄露,Ticker在触发之后不会自动的从系统中删除;Timer触发之后Timer本身会从时间堆中删除