protected override async Task <double> ComputePrice() { InstallCost = _materialsService.GetInstallCost(_components); _item.Components = new List <Item>(); var componentTasks = new List <Task <Item> >(); foreach (var comp in _components) { componentTasks.Add(_buildFunc(comp.Id, comp.Amount)); } _item.Components = (await Task.WhenAll(componentTasks.ToArray())).ToList(); ComponentsCost = _item.Components.Sum(x => x.BestObtainingPrice); return(InstallCost + ComponentsCost); }