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