У меня сложный цикл foreach. Мне приходится регулировать каждые 100 подключений из-за того, что веб-сервер выбрасывает 529, и я знаю, что параллельно мое регулирование может испортиться.
Есть ли способ заставить этот прогон работать параллельно, и при этом работать так же? Я только начал заниматься параллельным программированием и не думаю, что смогу обойти это.
foreach (var userId in IdCollection)
{
i++;
if (i % 100 == 0 && i != 0)
{
Thread.Sleep(15 * 1000);
}
ProcessId(userId, file);
}
ProcessId:
static async void ProcessId(long userId, string file)
{
var username = await Utilities.GetUsernameFromId(userId);
FileUtilities.WriteUsernameToFile(username, file);
IdItemsProcessed++;
}
Метод GetUsernameFromId - это тот, который на самом деле зависает, моя причина для параллельной работы состоит в том, чтобы, надеюсь, ускорить это, у меня есть более 1 миллиона ID для обработки, и с такой скоростью это займет у меня навсегда.
Он запускает веб-клиент на сервере, захватывает ответ и разбирает его на имя пользователя. Довольно простые вещи, но когда вы делаете это в больших количествах, это может стать проблемой.