private async Task <IEnumerable <RateNPVDTO> > ComputeValueAsync(NPVParametersDTO data) { var tasks = new List <Task <KeyValuePair <double, double> > >(); for (double rate = data.LowerBoundDiscountRate; rate <= data.UpperBoundDiscountRate; rate += data.DiscountRateIncrement) { var ratePercent = rate / 100; var NPVTask = Task.Factory.StartNew(b => ComputeNPV(data.CashFlows, (double)b), ratePercent); tasks.Add(NPVTask); } var continuation = await Task.WhenAll(tasks); var npvRates = new List <RateNPVDTO>(); npvRates.AddRange( continuation.Select(x => new RateNPVDTO() { Rate = Math.Round(x.Key * 100, 2), NPV = Math.Round(x.Value, 2) })); return(npvRates); }
public async Task <IEnumerable <RateNPVDTO> > ComputeValue([FromBody] NPVParametersDTO data) { return(await ComputeValueAsync(data)); }