public void PreparaCenario(List <Cenario> cenarios, ParametrosPerna[] parametrosPernas, ParametrosPernaCenario[] parametrosPernasCenario, int perna) { ParametrosPerna parametrosPerna = parametrosPernas[perna]; if (perna < parametrosPernas.Length - 1) { List <Task> tasks = new List <Task>(); List <List <Cenario> > cenariosPorTasks = new List <List <Cenario> >(); for (decimal x = parametrosPerna.MinX; x <= parametrosPerna.MaxX; x = decimal.Add(x, 0.01m)) { parametrosPernasCenario[perna].X = x; if (perna == 0) { ParametrosPernaCenario[] parametrosPernasNovoCenario = new ParametrosPernaCenario[parametrosPernas.Length]; for (int i = 0; i < parametrosPernas.Length; i++) { parametrosPernasNovoCenario[i] = new ParametrosPernaCenario(parametrosPernasCenario[i]); } /// Cada task tem uma lista de cenários, para evitar problemas de concorrência List <Cenario> cenariosPorTask = new List <Cenario>(); cenariosPorTasks.Add(cenariosPorTask); Task task = Task.Run(() => PreparaCenario(cenariosPorTask, parametrosPernas, parametrosPernasNovoCenario, perna + 1)); tasks.Add(task); } else { PreparaCenario(cenarios, parametrosPernas, parametrosPernasCenario, perna + 1); } } if (tasks.Count > 0) { Task.WaitAll(tasks.ToArray()); foreach (List <Cenario> cenariosPorTask in cenariosPorTasks) { cenarios.AddRange(cenariosPorTask); } } } else { Cenario cenario = new Cenario(parametrosPernasCenario); cenario = CalculaUltimaPernaCenario(parametrosPernas, cenario, perna); if (cenario != null) { cenario = CalculaCenario(cenario); cenarios.Add(cenario); } } }
public void PreparaCenario(List <Cenario> cenarios, ParametrosPerna[] parametrosPernas, ParametrosPernaCenario[] parametrosPernasCenario, int perna) { ParametrosPerna parametrosPerna = parametrosPernas[perna]; if (perna < parametrosPernas.Length - 1) { for (decimal x = parametrosPerna.MinX; x <= parametrosPerna.MaxX; x = decimal.Add(x, 0.01m)) { parametrosPernasCenario[perna].X = x; PreparaCenario(cenarios, parametrosPernas, parametrosPernasCenario, perna + 1); } } else { Cenario cenario = new Cenario(parametrosPernasCenario); cenario = CalculaUltimaPernaCenario(parametrosPernas, cenario, perna); if (cenario != null) { cenario = CalculaCenario(cenario); cenarios.Add(cenario); } } }
static void Main(string[] args) { ParametrosPerna[] parametros = new ParametrosPerna[5]; parametros[0] = new ParametrosPerna { MinX = 0.18m, MaxX = 0.38m, PrecoExec = 0.28m, Vega = 0.05m }; parametros[1] = new ParametrosPerna { MinX = -1.22m, MaxX = -0.82m, PrecoExec = -1.02m, Vega = 0.05m }; parametros[2] = new ParametrosPerna { MinX = 0.14m, MaxX = 0.34m, PrecoExec = 0.24m, Vega = 0.05m }; parametros[3] = new ParametrosPerna { MinX = 0.10m, MaxX = 0.30m, PrecoExec = 0.21m, Vega = 0.05m }; parametros[4] = new ParametrosPerna { MinX = 0.20m, MaxX = 0.40m, PrecoExec = 0.31m, Vega = 0.05m }; ModulacaoAsync modulacaoAsync = new ModulacaoAsync(); modulacaoAsync.Modula(parametros); ModulacaoSync modulacaoSync = new ModulacaoSync(); modulacaoSync.Modula(parametros); Console.ReadLine(); }
public ParametrosPernaCenario(ParametrosPerna source) { PrecoExec = source.PrecoExec; Vega = source.Vega; }