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());
|
||||
|
||||
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());
|
||||
|
||||
Console.WriteLine($"Buscando dados de {dataInicial} até {dataFinal}...");
|
||||
string xmlRequest = PrepararXML(dataInicial, dataFinal);
|
||||
Console.WriteLine($"Buscando dados de {menorDataInicial} até {dataFinal} em períodos de 1 dia...");
|
||||
|
||||
List<Task<string>> tarefasRequisicoes = new List<Task<string>>();
|
||||
for (DateTime data = menorDataInicial; data < dataFinal; data = data.AddDays(1))
|
||||
{
|
||||
DateTime dataInicio = data;
|
||||
DateTime dataFim = dataInicio.AddDays(1);
|
||||
|
||||
tarefasRequisicoes.Add(Task.Run(async () =>
|
||||
{
|
||||
await _requestLimiter.WaitAsync();
|
||||
string resposta = await _httpClient.EnviarRequisicaoAsync(xmlRequest);
|
||||
string xmlResponse = await _httpClient.EnviarRequisicaoAsync(PrepararXML(dataInicio, dataFim));
|
||||
_requestLimiter.Release();
|
||||
return xmlResponse;
|
||||
}));
|
||||
}
|
||||
|
||||
// Criar processador e processar XML
|
||||
// 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 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
|
||||
if (plds.Count > 0)
|
||||
if (todosPLDs.Count > 0)
|
||||
{
|
||||
// Para cada repositório, passar a data inicial correta
|
||||
Parallel.ForEach(datasIniciais, kvp =>
|
||||
{
|
||||
var repo = kvp.Key;
|
||||
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