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);
        }