in task.go [141:160]
func runAndTrackGenericTask[T any](ctx context.Context, record *Task[T], task func(ctx context.Context) (T, error)) {
defer record.waitGroup.Done()
defer func() {
if r := recover(); r != nil {
err := fmt.Errorf("panic cought: %v, stackTrace: %s, %w", r, debug.Stack(), ErrPanic)
record.finish(StateFailed, *new(T), err)
}
}()
result, err := task(ctx)
if err == nil {
record.finish(StateCompleted, result, nil)
return
}
// err not nil, fail the task
record.finish(StateFailed, result, err)
}