using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ELT.Client.Models.Insurance; using ELT.Client.Models.Insurance.Request; using ELTOsago; namespace ELT.Client.Managers.Insurance { public class OsagoManager : InsuranceManager { private readonly EltSoap _eltOsagoSoap; public OsagoManager() { _eltOsagoSoap = new EltSoapClient(); } public override Dictionary Calculate( CalculateOsagoRequest calculateOsagoRequest, ELTPreData preRequestData) { var result = new Dictionary(); var osagoParams = calculateOsagoRequest.ELTParams; osagoParams.UsagePlace = preRequestData.Kladr; osagoParams.CarInfo.Mark = preRequestData.Brand; osagoParams.CarInfo.Model = preRequestData.Model; osagoParams.AuthInfo = new ELTOsago.AuthInfo { Login = AuthInfo.Login, Password = AuthInfo.Password }; var tasks = calculateOsagoRequest.CompanyIds.Distinct().Select(companyId => new Task(() => { try { osagoParams.InsuranceCompany = companyId; var res = _eltOsagoSoap.OSAGOFullCalculation(osagoParams); if (string.IsNullOrEmpty(res.Error)) result.Add(companyId, res); } catch (Exception) { } })); var tasksArray = tasks as Task[] ?? tasks.ToArray(); Parallel.ForEach(tasksArray, (t) => t.Start()); Task.WaitAll(tasksArray.ToArray()); return result; } } }