From 1c070e26464559e8f20b7dd278c1d559b1a494cf Mon Sep 17 00:00:00 2001 From: liwei <2211068034@qq.com> Date: Thu, 13 Jul 2023 11:36:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=B6=E9=97=B4=E8=BD=AE?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lego/sys/timewheel/timewheel.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lego/sys/timewheel/timewheel.go b/lego/sys/timewheel/timewheel.go index 2e0f2acbd..2dae4f6bc 100644 --- a/lego/sys/timewheel/timewheel.go +++ b/lego/sys/timewheel/timewheel.go @@ -88,7 +88,7 @@ func (t *Task) Reset() { t.circle = false } -//启动时间轮 +// 启动时间轮 func (this *TimeWheel) Start() { // onlye once start this.onceStart.Do( @@ -114,12 +114,12 @@ func (this *TimeWheel) Remove(task *Task) error { return nil } -//停止时间轮 +// 停止时间轮 func (this *TimeWheel) Stop() { this.stopC <- struct{}{} } -//此处写法 为监控时间轮是否正常执行 +// 此处写法 为监控时间轮是否正常执行 func (this *TimeWheel) tickGenerator() { if this.tickQueue == nil { return @@ -137,7 +137,7 @@ func (this *TimeWheel) tickGenerator() { } } -//调度器 +// 调度器 func (this *TimeWheel) schduler() { queue := this.ticker.C if this.tickQueue != nil { @@ -160,7 +160,7 @@ func (this *TimeWheel) schduler() { } } -//清理 +// 清理 func (this *TimeWheel) collectTask(task *Task) { index := this.bucketIndexes[task.id] delete(this.bucketIndexes, task.id) @@ -185,8 +185,9 @@ func (this *TimeWheel) handleTick() { } if task.async { - go func(task *Task) { - go this.calltask(task, task.args...) + go func(_task *Task) { + this.calltask(_task, _task.args...) + this.collectTask(task) }(task) } else { @@ -202,7 +203,9 @@ func (this *TimeWheel) handleTick() { } // gc - this.collectTask(task) + if !task.async { + this.collectTask(task) + } } if this.currentIndex == this.bucketsNum-1 { @@ -213,7 +216,7 @@ func (this *TimeWheel) handleTick() { this.currentIndex++ } -//执行时间轮事件 捕捉异常错误 防止程序崩溃 +// 执行时间轮事件 捕捉异常错误 防止程序崩溃 func (this *TimeWheel) calltask(task *Task, args ...interface{}) { defer func() { //程序异常 收集异常信息传递给前端显示 if r := recover(); r != nil {