package main
import (
"fmt"
"time"
)
func main() {
/**
* NewTimer 可以指定定时时间,
* 可以重置定时时间,例如业务第一次重试是5s,但二次重试是10秒
* 记得用完停止定时器
*/
timer := time.NewTimer(5 * time.Second)
fmt.Println(<-timer.C) //2020-11-25 10:55:11.243245 +0800 CST m=+5.001232107
//timer.Reset() //重置定时器
timer.Stop() //停止定时器
/**
* NewTicker
* 结果
* 2020-11-25 10:55:16.244135 +0800 CST m=+10.002109076
* 2020-11-25 10:55:21.245859 +0800 CST m=+15.003820012
* 2020-11-25 10:55:26.249302 +0800 CST m=+20.007250152
*/
tiker := time.NewTicker(5 * time.Second)
for i := 0; i < 3; i++ {
fmt.Println(<-tiker.C) //
}
tiker.Stop()
/**
* After 几秒后执行
* 可以结合sleep一起实现
* 结果 timeout
*/
ch := make(chan string)
go func() {
time.Sleep(time.Second * 6)
ch <- "result"
}()
select {
case res := <-ch:
fmt.Println(res)
case <-time.After(time.Second * 5):
fmt.Println("timeout")
}
/**
* AfterFunc 是指从现在实现开始的几秒后执行事务
* 结果每隔5s 输出
* done
* done
* done
*/
for i := 0; i < 3; i++ {
is := time.Duration(i)
time.AfterFunc(is*5*time.Second, func() {
fmt.Println("done")
})
}
fmt.Println("end")
time.Sleep(50 * time.Second)
}
golang -几种定时器的使用-后续跟进具体信息
最新推荐文章于 2023-11-13 10:24:13 发布