go 定时任务timer和定时间隔任务ticker的使用
Timer类型代表单次时间事件。当Timer到期时,当时的时间会被发送给C
Ticker类型代表多次时间事件。
func main() {
log.Println(time.Now())
t2 := time.NewTimer(time.Millisecond * 3000)
<-t2.C
log.Println(time.Now())
}func main() {
for range time.Tick(time.Second * 1) {
log.Println(time.Now())
}
}使用timer实现随机间隔事件
package main
import (
"log"
"math/rand"
"time"
)
func main() {
t := time.NewTimer(time.Millisecond * 1000)
for {
<-t.C
n := 2 + rand.Intn(3)
log.Println(n)
log.Println(time.Now())
t.Reset(time.Duration(n) * time.Second)
}
}package main
import (
"log"
"strconv"
"time"
)
func main() {
log.Println("开始...")
timer := time.NewTimer(time.Millisecond * 2000)
for i := 1; ; i++ {
<-timer.C
log.Println("Ticker..." + strconv.Itoa(i) + "...")
if i >= 5 {
// 需要重置Reset 使t重新开始计时
timer.Reset(time.Second * 3)
} else {
timer.Reset(time.Millisecond * 1000)
}
if i >= 10 {
timer.Stop()
break
}
}
}2022/06/04 09:24:50 开始... 2022/06/04 09:24:53 Ticker...1... 2022/06/04 09:24:54 Ticker...2... 2022/06/04 09:24:55 Ticker...3... 2022/06/04 09:24:56 Ticker...4... 2022/06/04 09:24:57 Ticker...5... 2022/06/04 09:25:00 Ticker...6... 2022/06/04 09:25:03 Ticker...7... 2022/06/04 09:25:06 Ticker...8... 2022/06/04 09:25:09 Ticker...9... 2022/06/04 09:25:12 Ticker...10...