private void updatePersistableFor(IndividualSimulation simulation, bool exportAll) { if (exportAll) { _simulationPersistableUpdater.ResetPersistable(simulation); } else { _simulationPersistableUpdater.UpdatePersistableFromSettings(simulation); } }
public async Task RunAsync(PopulationSimulation populationSimulation) { _progressUpdater = _progressManager.Create(); _progressUpdater.Initialize(populationSimulation.NumberOfItems, PKSimConstants.UI.Calculating); _populationRunner.NumberOfCoresToUse = _userSettings.MaximumNumberOfCoresToUse; //make sure that thread methods always catch and handle any exception, //otherwise we risk unplanned application termination var begin = SystemTime.UtcNow(); try { var populationData = _populationExporter.CreatePopulationDataFor(populationSimulation); var modelCoreSimulation = _modelCoreSimulationMapper.MapFrom(populationSimulation, shouldCloneModel: false); _simulationPersistableUpdater.UpdatePersistableFromSettings(populationSimulation); _eventPublisher.PublishEvent(new SimulationRunStartedEvent()); var populationRunResults = await _populationRunner.RunPopulationAsync(modelCoreSimulation, populationData, populationSimulation.AgingData.ToDataTable()); _simulationResultsSynchronizer.Synchronize(populationSimulation, populationRunResults.Results); _populationSimulationAnalysisSynchronizer.UpdateAnalysesDefinedIn(populationSimulation); _eventPublisher.PublishEvent(new SimulationResultsUpdatedEvent(populationSimulation)); } catch (OperationCanceledException) { simulationTerminated(); } catch (Exception ex) { _exceptionManager.LogException(ex); simulationTerminated(); } finally { var end = SystemTime.UtcNow(); var timeSpent = end - begin; _eventPublisher.PublishEvent(new SimulationRunFinishedEvent(populationSimulation, timeSpent)); } }