修复异步任务panic未捕获问题

This commit is contained in:
白茶清欢 2022-06-25 19:42:25 +08:00
parent a7552c210d
commit 1136b75c32

17
task.go
View File

@ -97,24 +97,25 @@ func (d *dispatch) Run(ctx context.Context, cfg *Config) *Result {
defer func() { defer func() {
result.FinishTime = time.Now().UnixNano() result.FinishTime = time.Now().UnixNano()
result.Used = result.FinishTime - result.StartTime result.Used = result.FinishTime - result.StartTime
if e := recover(); nil != e {
switch e.(type) {
case runtime.Error: // 运行时错误
result.Err = fmt.Errorf("出现运行时Panic : %v", e)
default: // 非运行时错误
result.Err = fmt.Errorf("出现其他场景Panic : %v", e)
}
}
}() }()
d.lock.RLock() d.lock.RLock()
if taskInstance, exist = d.taskTable[cfg.TaskName]; !exist { if taskInstance, exist = d.taskTable[cfg.TaskName]; !exist {
result.Err = fmt.Errorf("%v 任务未注册", cfg.TaskName) result.Err = fmt.Errorf("%v 任务未注册", cfg.TaskName)
} }
d.lock.RUnlock()
result.TaskRunID = taskInstance.GetRunID() result.TaskRunID = taskInstance.GetRunID()
result.TaskDescription = taskInstance.Description() result.TaskDescription = taskInstance.Description()
if cfg.Async { if cfg.Async {
// 异步运行 // 异步运行
go func() { go func() {
if e := recover(); nil != e {
switch e.(type) {
case runtime.Error: // 运行时错误
result.Err = fmt.Errorf("出现运行时Panic : %v", e)
default: // 非运行时错误
result.Err = fmt.Errorf("出现其他场景Panic : %v", e)
}
}
result.Data, result.Err = taskInstance.Execute(ctx, cfg) result.Data, result.Err = taskInstance.Execute(ctx, cfg)
}() }()
} else { } else {