diff --git a/utils/timer/options.go b/utils/timer/options.go index ea8fb60..255f8c6 100644 --- a/utils/timer/options.go +++ b/utils/timer/options.go @@ -3,9 +3,11 @@ package timer type Option func(ticker *Ticker) // WithCaller 通过其他的 handler 执行 Caller -func WithCaller(handle func(name string, caller func())) Option { +func WithCaller(handler func(name string, caller func())) Option { return func(ticker *Ticker) { - ticker.handler = handle + ticker.lock.Lock() + ticker.handler = handler + ticker.lock.Unlock() } } diff --git a/utils/timer/ticker.go b/utils/timer/ticker.go index ebae57e..c739a12 100644 --- a/utils/timer/ticker.go +++ b/utils/timer/ticker.go @@ -150,7 +150,11 @@ func (slf *Ticker) loop(name string, after, interval time.Duration, expr *cronex slf.timers[name] = scheduler if slf.handler != nil { scheduler.timer = slf.wheel.ScheduleFunc(scheduler, func() { - slf.handler(scheduler.Name(), scheduler.Caller) + slf.lock.RLock() + defer slf.lock.RUnlock() + if slf.handler != nil { + slf.handler(scheduler.Name(), scheduler.Caller) + } }) } else { scheduler.timer = slf.wheel.ScheduleFunc(scheduler, scheduler.Caller)