背景
- 在平台开发过程中,当有些执行完某些操作后,可能还需要等待直到某个条件满足的时候
- 比如在CMDB删除了一个项目,CMDB需要一直等待其他系统资源回收完,才能在自身彻底释放对应的资源, 那就需要一直在哪里等待
今天主要是一个关于定时轮训、等待的工具方法实现
完整代码
package wait
import (
"errors"
"math/rand"
"time"
)
// Jitter 允许时间在一定范围内的波动
func Jitter(duration time.Duration, maxFactor float64) time.Duration {
if maxFactor <= 0.0 {
maxFactor = 1.0
}
wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration))
return wait
}
// resetReuseTimer 重置timer
func resetReuseTimer(t *time.Timer, d time.Duration, sawTimeout bool) *time.Timer {
if t == nil {
return time.NewTimer(d)
}
if !t.Stop() && !sawTimeout {
<-t.C
}
t.Reset(d)
return t
}
// HandlerCrash 控制失败异常
func HandlerCrash() {
println("crash")
}
// JitterUtil 周期调度函数执行
func JitterUtil(f func(), period time.Duration, jitterFacto