fix: 修复 timer.Ticker 并发问题
This commit is contained in:
parent
17cdad2c6e
commit
d1d5bd40d4
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue