From 1c65ea4887c6266ac913f16d6e53b2b33b2e74fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E7=9B=8A?= Date: Fri, 10 Mar 2023 17:01:17 +0800 Subject: [PATCH] Allow alternative task execute function --- timingwheel.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/timingwheel.go b/timingwheel.go index e2c64e0..a386d0a 100644 --- a/timingwheel.go +++ b/timingwheel.go @@ -9,6 +9,12 @@ import ( "github.com/RussellLuo/timingwheel/delayqueue" ) +var taskRunner = func(task func()) { + // Like the standard time.AfterFunc (https://golang.org/pkg/time/#AfterFunc), + // always execute the timer's task in its own goroutine. + go task() +} + // TimingWheel is an implementation of Hierarchical Timing Wheels. type TimingWheel struct { tick int64 // in milliseconds @@ -111,10 +117,7 @@ func (tw *TimingWheel) add(t *Timer) bool { func (tw *TimingWheel) addOrRun(t *Timer) { if !tw.add(t) { // Already expired - - // Like the standard time.AfterFunc (https://golang.org/pkg/time/#AfterFunc), - // always execute the timer's task in its own goroutine. - go t.task() + taskRunner(t.task) } } @@ -224,3 +227,8 @@ func (tw *TimingWheel) ScheduleFunc(s Scheduler, f func()) (t *Timer) { return } + +// SetTaskRunner replace default timer execute function. +func SetTaskRunner(runner func(task func())) { + taskRunner = runner +}