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