public override List <OutcomeSummary> ExecuteSimulate(InputData input) { var list = new List <OutcomeSummary>(); var date = new DateTime(1800, 1, 1); var rowNumber = 0; while (date < DateTime.Now.AddMonths(1)) { date = date.AddMonths(1); //Exclude all years filtered by start year/month. if (input.StartYear > date.Year) { continue; } if (input.StartYear == date.Year && input.StartMonth > date.Month) { continue; } if (input.LastYearOfDataUsed < date.Year) { continue; } var tmpInput = CloneInputData(input); tmpInput.StartMonth = date.Month; tmpInput.StartYear = date.Year; var outcome = new AllYearsSimulation().Run(tmpInput); rowNumber++; var summary = new OutcomeSummary() { Outcomes = outcome, RowNumber = rowNumber, }; summary.ProcessOutcomes(tmpInput); lock (list) { list.Add(summary); } } PrintSummaryData(list, input); return(list); }
public override List <OutcomeSummary> ExecuteSimulate(InputData input) { var list = new List <OutcomeSummary>(); Parallel.For(0, input.NumberOfSimulations, index => { var outcome = new RandomOrderSimulation().Run(input.GetClone()); var summary = new OutcomeSummary() { Outcomes = outcome, RowNumber = index }; summary.ProcessOutcomes(input); lock (list) { list.Add(summary); } }); PrintSummaryData(list, input); return(list); }