定时任务在编程之旅中是非常常见的需求,比如B站每天12点统计昨天总的播放量,我每天发邮件给老板拍马屁等
根据任务的阻塞与否可分为:
同步任务
异步任务
在golang中,执行异步定时任务非常简单,只需time包配合go协程即可
so elegant~
根据需求不同,一般有两种定时任务:
到达指定时间执行一次就完事的任务
每次到达一定时间就得执行一次的任务
上面两种需求,分别对应time包的两个结构体:Timer与Ticker
可以把Timer理解为,可以取消、重设的一次性闹钟
下面是关于它的所有内容:
例子:
1) 阻塞三秒后,继续执行:
2) 通过Stop方法,取消任务:
在协程里接收timer.C,随后取消任务,4秒后依然没有看到协程的输出,所以确实成功取消了任务
3) 通过Reset方法,重设任务:
4) 如果你的任务函数没有入参和出参,可以直接使用AfterFunc函数:
golang的time.Timer与JS的setTimeout函数几乎一模一样:
只是JS只有setTimeout和clearTimeout,没有重设,不过也可以组合两者达到重设的效果
可以把Ticker理解为,可以取消、重设的周期性闹钟
下面是关于它的所有内容:
例子:
1) 3秒输出一次hello:
2) 取消和重设的功能和Timer一样,就不演示了
3) 如果Ticker不需要取消和重设,可以用Tick函数:
和例1是一样的效果:
4) Ticker没有像Timer一样的AfterFunc函数(其实AfterFunc也没什么大用)
golang的time.Ticker与JS的setInterval函数几乎一模一样:
同样也是没有重设的功能
that's all, hope it's helpful to u, thanks