public async void Run(Guid runId) { if (_processingTask != null) { await CancelExistingRun(); } if (_cancelToken != null) { _cancelToken.Cancel(); _cancelToken.Dispose(); } _cancelToken = new CancellationTokenSource(); _processingTask = Task.Run(async() => { _processingStartedOn = DateTime.Now; using (var scope = _serviceScopeFactory.CreateScope()) { var runsRepository = scope.ServiceProvider.GetRequiredService <AppKeyRepository <Run> >(); ProcessingRun = runsRepository.Read <RunReadModel>().SingleOrDefault(r => r.Id == runId); _processingRunData = new RunData(ProcessingRun); if (ProcessingRun == null) { throw new ToolsException($"Cannot find run with id {runId}."); } } await SaveRunData(); foreach (var testRun in ProcessingRun.TestRuns) { await ProcessTestRun(testRun); } _processingFinishedOn = DateTime.Now; _processingRunData.Status = RunStatus.Finished; await SaveRunData(); SendRunData(() => { ProcessingRun = null; _processingRunData = null; _processingTask = null; _processingStartedOn = null; _processingFinishedOn = null; }); }); }
public async Task CancelExistingRun() { if (ProcessingRun != null) { if (_processingTask != null) { _cancelToken.Cancel(); _cancelToken.Dispose(); _cancelToken = null; } _processingRunData.Status = RunStatus.Cancelled; await SaveRunData(); ProcessingRun = null; _processingRunData = null; _processingTask = null; _processingStartedOn = null; _processingFinishedOn = null; } }