Teste requições diárias parelelas.
This commit is contained in:
parent
751e7da3a6
commit
cfe6605f49
@ -22,34 +22,51 @@ public class PLDService
|
|||||||
.ToDictionary(repo => repo, repo => repo.ObterDataInicial());
|
.ToDictionary(repo => repo, repo => repo.ObterDataInicial());
|
||||||
|
|
||||||
DateTime dataFinal = DateTime.Now.Date.AddDays(1);
|
DateTime dataFinal = DateTime.Now.Date.AddDays(1);
|
||||||
DateTime dataInicial = datasIniciais.Values.Min();
|
DateTime menorDataInicial = datasIniciais.Values.Min();
|
||||||
|
|
||||||
// Criar um timer que reseta a cada segundo 00
|
// Criar um timer que reseta a cada minuto no segundo 00
|
||||||
_ = Task.Run(() => ResetarLimitePorMinuto());
|
_ = Task.Run(() => ResetarLimitePorMinuto());
|
||||||
|
|
||||||
Console.WriteLine($"Buscando dados de {dataInicial} até {dataFinal}...");
|
Console.WriteLine($"Buscando dados de {menorDataInicial} até {dataFinal} em períodos de 1 dia...");
|
||||||
string xmlRequest = PrepararXML(dataInicial, dataFinal);
|
|
||||||
|
|
||||||
await _requestLimiter.WaitAsync();
|
List<Task<string>> tarefasRequisicoes = new List<Task<string>>();
|
||||||
string resposta = await _httpClient.EnviarRequisicaoAsync(xmlRequest);
|
for (DateTime data = menorDataInicial; data < dataFinal; data = data.AddDays(1))
|
||||||
_requestLimiter.Release();
|
{
|
||||||
|
DateTime dataInicio = data;
|
||||||
|
DateTime dataFim = dataInicio.AddDays(1);
|
||||||
|
|
||||||
// Criar processador e processar XML
|
tarefasRequisicoes.Add(Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await _requestLimiter.WaitAsync();
|
||||||
|
string xmlResponse = await _httpClient.EnviarRequisicaoAsync(PrepararXML(dataInicio, dataFim));
|
||||||
|
_requestLimiter.Release();
|
||||||
|
return xmlResponse;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aguarda todas as requisições finalizarem e junta os resultados
|
||||||
|
string[] respostasXML = await Task.WhenAll(tarefasRequisicoes);
|
||||||
|
|
||||||
|
// Criar processador e consolidar todos os PLDs
|
||||||
var processor = new PLDProcessor();
|
var processor = new PLDProcessor();
|
||||||
var plds = processor.ProcessarXML(resposta);
|
List<PLDModel> todosPLDs = new List<PLDModel>();
|
||||||
|
|
||||||
|
foreach (string xml in respostasXML)
|
||||||
|
{
|
||||||
|
todosPLDs.AddRange(processor.ProcessarXML(xml));
|
||||||
|
}
|
||||||
|
|
||||||
// Atualiza ambos os bancos apenas se houver novos dados
|
// Atualiza ambos os bancos apenas se houver novos dados
|
||||||
if (plds.Count > 0)
|
if (todosPLDs.Count > 0)
|
||||||
{
|
{
|
||||||
// Para cada repositório, passar a data inicial correta
|
|
||||||
Parallel.ForEach(datasIniciais, kvp =>
|
Parallel.ForEach(datasIniciais, kvp =>
|
||||||
{
|
{
|
||||||
var repo = kvp.Key;
|
var repo = kvp.Key;
|
||||||
var ultimaData = kvp.Value;
|
var ultimaData = kvp.Value;
|
||||||
repo.SalvarPLDs(plds, ultimaData);
|
repo.SalvarPLDs(todosPLDs, ultimaData);
|
||||||
});
|
});
|
||||||
|
|
||||||
Console.WriteLine("PLDs salvos com sucesso.");
|
Console.WriteLine($"PLDs de {menorDataInicial} a {dataFinal} salvos com sucesso.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user