fix: 修复 timer.Ticker 并发问题
This commit is contained in:
parent
17cdad2c6e
commit
d1d5bd40d4
|
@ -3,9 +3,11 @@ package timer
|
||||||
type Option func(ticker *Ticker)
|
type Option func(ticker *Ticker)
|
||||||
|
|
||||||
// WithCaller 通过其他的 handler 执行 Caller
|
// 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) {
|
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
|
slf.timers[name] = scheduler
|
||||||
if slf.handler != nil {
|
if slf.handler != nil {
|
||||||
scheduler.timer = slf.wheel.ScheduleFunc(scheduler, func() {
|
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 {
|
} else {
|
||||||
scheduler.timer = slf.wheel.ScheduleFunc(scheduler, scheduler.Caller)
|
scheduler.timer = slf.wheel.ScheduleFunc(scheduler, scheduler.Caller)
|
||||||
|
|
Loading…
Reference in New Issue