fix: 修复 timer.Ticker 的 CronByInstantly 函数导致的死锁问题

This commit is contained in:
kercylan98 2023-12-12 11:50:58 +08:00
parent 5714a437cc
commit 8a8610f756
1 changed files with 16 additions and 13 deletions

View File

@ -81,20 +81,23 @@ func (slf *Ticker) Cron(name, expression string, handleFunc interface{}, args ..
// CronByInstantly 与 Cron 相同,但是会立即执行一次 // CronByInstantly 与 Cron 相同,但是会立即执行一次
func (slf *Ticker) CronByInstantly(name, expression string, handleFunc interface{}, args ...interface{}) { func (slf *Ticker) CronByInstantly(name, expression string, handleFunc interface{}, args ...interface{}) {
var values = make([]reflect.Value, len(args)) func(name, expression string, handleFunc interface{}, args ...interface{}) {
for i, v := range args { var values = make([]reflect.Value, len(args))
values[i] = reflect.ValueOf(v) for i, v := range args {
} values[i] = reflect.ValueOf(v)
f := reflect.ValueOf(handleFunc) }
slf.lock.RLock() f := reflect.ValueOf(handleFunc)
defer slf.lock.RUnlock() slf.lock.RLock()
if slf.handle != nil { defer slf.lock.RUnlock()
slf.handle(name, func() { if slf.handle != nil {
slf.handle(name, func() {
f.Call(values)
})
} else {
f.Call(values) f.Call(values)
}) }
} else { }(name, expression, handleFunc, args...)
f.Call(values)
}
slf.Cron(name, expression, handleFunc, args...) slf.Cron(name, expression, handleFunc, args...)
} }