From 12619b5fa4008a803eb2f62947732de7ad9b0d7f Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Tue, 12 Dec 2023 10:52:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20timer.Ticker=20=E6=96=B0=E5=A2=9E=20Cro?= =?UTF-8?q?nByInstantly=20=E5=87=BD=E6=95=B0=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=9C=A8=E8=AE=BE=E7=BD=AE=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=89=8D=E5=85=88=E6=89=A7=E8=A1=8C=E4=B8=80=E6=AC=A1=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/timer/ticker.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/utils/timer/ticker.go b/utils/timer/ticker.go index de59f93..4b267a3 100644 --- a/utils/timer/ticker.go +++ b/utils/timer/ticker.go @@ -79,6 +79,25 @@ func (slf *Ticker) Cron(name, expression string, handleFunc interface{}, args .. slf.loop(name, 0, 0, expr, 0, handleFunc, args...) } +// CronByInstantly 与 Cron 相同,但是会立即执行一次 +func (slf *Ticker) CronByInstantly(name, expression string, handleFunc interface{}, args ...interface{}) { + var values = make([]reflect.Value, len(args)) + for i, v := range args { + values[i] = reflect.ValueOf(v) + } + f := reflect.ValueOf(handleFunc) + slf.lock.RLock() + defer slf.lock.RUnlock() + if slf.handle != nil { + slf.handle(name, func() { + f.Call(values) + }) + } else { + f.Call(values) + } + slf.Cron(name, expression, handleFunc, args...) +} + // After 设置一个在特定时间后运行一次的调度器 func (slf *Ticker) After(name string, after time.Duration, handleFunc interface{}, args ...interface{}) { slf.loop(name, after, timingWheelTick, nil, 1, handleFunc, args...)