use async tasks requests

This commit is contained in:
Chika 2021-03-21 22:56:09 +03:00
parent 6191f01da3
commit ebc973093e

View File

@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ELT.Client.Models.Insurance; using ELT.Client.Models.Insurance;
using ELT.Client.Models.Insurance.Request; using ELT.Client.Models.Insurance.Request;
using ELTKasko; using ELTKasko;
@ -9,6 +11,7 @@ namespace ELT.Client.Managers.Insurance
public class KaskoManager : InsuranceManager<CalculateKaskoRequest, KASKOCalculationResult> public class KaskoManager : InsuranceManager<CalculateKaskoRequest, KASKOCalculationResult>
{ {
private readonly EltSoap _eltKaskoSoap; private readonly EltSoap _eltKaskoSoap;
public KaskoManager() public KaskoManager()
{ {
_eltKaskoSoap = new EltSoapClient(); _eltKaskoSoap = new EltSoapClient();
@ -23,9 +26,11 @@ namespace ELT.Client.Managers.Insurance
kaskoParams.Mark = preRequestData.Brand; kaskoParams.Mark = preRequestData.Brand;
kaskoParams.Model = preRequestData.Model; kaskoParams.Model = preRequestData.Model;
var result = new Dictionary<string, KASKOCalculationResult>(); var result = new Dictionary<string, KASKOCalculationResult>();
foreach (var companyId in calculateKaskoRequest.CompanyIds)
try var tasks = calculateKaskoRequest.CompanyIds.Distinct().Select(companyId =>
new Task(() =>
{ {
var res = _eltKaskoSoap.PreliminaryKASKOCalculation( var res = _eltKaskoSoap.PreliminaryKASKOCalculation(
new ELTKasko.AuthInfo new ELTKasko.AuthInfo
@ -46,11 +51,11 @@ namespace ELT.Client.Managers.Insurance
, kaskoParams); , kaskoParams);
if (string.IsNullOrEmpty(res.Error)) if (string.IsNullOrEmpty(res.Error))
result.Add(companyId, res); result.Add(companyId, res);
} }));
catch (Exception)
{ var tasksArray = tasks as Task[] ?? tasks.ToArray();
// ignored Parallel.ForEach(tasksArray, (t) => t.Start());
} Task.WaitAll(tasksArray.ToArray());
return result; return result;
} }