private static void WriteResult(List <Algorithms.SimulationResult> results, TimeSpan durationSinceStart, TextWriter outputStream) { Algorithms.SimulationResult overallResult = new Algorithms.SimulationResult(0, 0); foreach (var result in results) { overallResult += result; } outputStream.WriteLine( $"iterations={overallResult.TotalSimulations:n0}; goodLists={(overallResult.TotalSimulations - overallResult.TotalCollisions):n0}; collision probability={(overallResult.CollisionProbability):P5}; iteration/sec={(overallResult.TotalSimulations / durationSinceStart.TotalSeconds):n0}; total time={durationSinceStart.TotalSeconds:n}s"); }
public async Task <SimulationResult> StartSimulationAsync(Clip[] sourceClips) { // Error if running if (null != _cancelTokenSource) { throw new InvalidOperationException("Simulation already running. Please stop before restarting."); } _cancelTokenSource = new System.Threading.CancellationTokenSource(); _result = new SimulationResult(); return(await Task.Run <SimulationResult>(() => { SimulateMonteCarlo(sourceClips, _cancelTokenSource.Token); return this.CurrentResult; }, _cancelTokenSource.Token)); }