复现代码:
task := &timing2.Task{
Uuid: "uuid",
Job: timing2.GetJob(func() {
panic("err")
}),
RunTime: time.Now().Unix() + 90,
}
异常代码处:
job.go func (j *taskJob) run()
原因是 defer的顺序是 先进后出,原代码会先触发 j.done <- true 然后进行了 finish的逻辑,代码应改为:
defer func() {
if !isPanic {
j.done <- true
}
}()
defer func() {
if x := recover(); x != nil {
err := errors.Errorf("job error with panic:%v", x)
j.err <- err
isPanic = true
return
}
}()
复现代码:
task := &timing2.Task{
Uuid: "uuid",
Job: timing2.GetJob(func() {
panic("err")
}),
RunTime: time.Now().Unix() + 90,
}
异常代码处:
job.go func (j *taskJob) run()
原因是 defer的顺序是 先进后出,原代码会先触发 j.done <- true 然后进行了 finish的逻辑,代码应改为: