func runAndTrackGenericTask[T any]()

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)
}