Работать сложно для каждого параллельно? - PullRequest
0 голосов
/ 28 апреля 2018

У меня сложный цикл 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 для обработки, и с такой скоростью это займет у меня навсегда.

Он запускает веб-клиент на сервере, захватывает ответ и разбирает его на имя пользователя. Довольно простые вещи, но когда вы делаете это в больших количествах, это может стать проблемой.

...