Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public async Task <IEnumerable <RateNPVDTO> > ComputeValue([FromBody] NPVParametersDTO data)
 {
     return(await ComputeValueAsync(data));
 }