Пример #1
0
        private void EndTask(Task task)
        {
            _logger.Debug($"Task ended. Status: {task.Status}", nameof(EndTask), task.Exception?.InnerException);

            JobRunStatus status;
            Exception    exception = null;

            switch (task.Status)
            {
            case TaskStatus.RanToCompletion:
                status = JobRunStatus.Completed;
                break;

            case TaskStatus.Canceled:
                status = JobRunStatus.Canceled;
                break;

            case TaskStatus.Faulted:
                status    = JobRunStatus.Faulted;
                exception = ExtractTaskException(task.Exception);
                break;

            default:
                status = JobRunStatus.Unknown;     // actually, very strange and should never happen.
                break;
            }

            var now = TimeProvider.GetCurrentTime();

            _runInfoBuilder.EndTime   = now;
            _runInfoBuilder.Status    = status;
            _runInfoBuilder.Exception = exception;

            var jobRunInfo = _runInfoBuilder.Build();

            _initiator.JobRunsHolder.Finish(jobRunInfo);

            _tokenSource.Dispose();
            _systemWriter.Dispose();

            _initiator.OnTaskEnded();
        }