Проблемы с параллельным парсингом
Нет понимания по какой причине при запуске программы происходит моментальное завершение. Смысл заключается в том, что есть базовые ссылки, которые дают данные с локального + ещё ряд айдишников, по которым также можно обратиться на локальный сервер и получить ещё больше данных. Нужно это как можно быстрее спарсить, поэтому идея такова, что на каждый новый айдишник создаю новый поток и в нём начинаю обращаться по каждому отдельному айдишнику. Но при попытке парсинга, программа моментально завершается. Как я понимаю, завершая основной поток, либо парсинг идет по какой-то причине ооочень медленно.
Dictionary<string, string> Datas = new()
{
{"Instances","http://localhost:8042/instances" },
{"Series","http://localhost:8042/series" },
{"Patients","http://localhost:8042/patients" },
{"Studies","http://localhost:8042/studies" }
};
HttpClient httpClient = new();
var PatientsTask = Task.Run(() => { PatientDataGetter(Datas.GetValueOrDefault("Patients")); });
var StudyTask = Task.Run(() => { StudyDataGetter(Datas.GetValueOrDefault("Studies")); });
var SeriesTask = Task.Run(() => { SerieeDataGetter(Datas.GetValueOrDefault("Series")); });
var InstancesTask = Task.Run(() => { InstanceDataGetter(Datas.GetValueOrDefault("Instances")); });
async Task PatientDataGetter(string url)
{
var PatientsIDs = JsonConvert.DeserializeObject<List<string>>(await httpClient.GetStringAsync(url));
int index = 0;
foreach (var item in PatientsIDs)
{
index++;
Patient? patient = new Patient();
patient = JsonConvert.DeserializeObject<Patient>(await httpClient.GetStringAsync($"{url}/{item}"));
patient.Path = $"{url}/{item}";
PatientDateConverter(patient);
Console.SetCursorPosition(0, 0);
Console.Write($"Пациент {index}/{PatientsIDs.Count()}");
}
}
async Task SerieeDataGetter(string url)
{
var SerieeIDs = JsonConvert.DeserializeObject<List<string>>(await httpClient.GetStringAsync(url));
int index = 0;
foreach (var item in SerieeIDs)
{
index++;
Seriee? seriee = new Seriee();
seriee = JsonConvert.DeserializeObject<Seriee>(await httpClient.GetStringAsync($"{url}/{item}"));
seriee.Path = $"{url}/{item}";
Console.SetCursorPosition(0, 1);
Console.Write($"Серия {index}/{SerieeIDs.Count()}");
}
}
async Task InstanceDataGetter(string url)
{
var InstanceIDs = JsonConvert.DeserializeObject<List<string>>(await httpClient.GetStringAsync(url));
int index = 0;
foreach (var item in InstanceIDs)
{
index++;
Instance? instance = new Instance();
instance = JsonConvert.DeserializeObject<Instance>(await httpClient.GetStringAsync($"{url}/{item}"));
instance.Path = $"{url}/{item}";
Console.SetCursorPosition(0, 2);
Console.Write($"Экземпляр {index}/{InstanceIDs.Count()}");
}
}
async Task StudyDataGetter(string url)
{
var StudyIDs = JsonConvert.DeserializeObject<List<string>>(await httpClient.GetStringAsync(url));
int index = 0;
foreach (var item in StudyIDs)
{
index++;
Study? study = new Study();
study = JsonConvert.DeserializeObject<Study>(await httpClient.GetStringAsync($"{url}/{item}"));
study.Path = $"{Datas.GetValueOrDefault("Studies")}/{item}";
StudyDateConverter(study);
Console.SetCursorPosition(0, 3);
Console.Write($"Исследование {index}/{StudyIDs.Count()}");
}
}