Parallel.For - прерывание цикла

inotoxic

Client
Регистрация
20.04.2015
Сообщения
354
Реакции
164
Баллы
43
Имеется код параллельного цикла

Код:
Развернуть Свернуть Копировать
System.Threading.Tasks.Parallel.For(0, count, x => {
 
Код GET запроса на проверку прокси

  if (!Regex.Match(content, "^$|blocked|заблокирован|Access Denied|403 Forbidden|Активность с вашего IP-адреса|").Success) //проверка блокировок
  {
    Good.Add(proxy);// записываем живую проксю в конец списка*
    project.Variables["proxy"].Value = proxy;//вернули прокси в переменную
    project.Variables["chekproxy"].Value = "True";
 
    .... что здесь правильно прописать для остановки цикла при срабатывании условия в if
    если указать
    break;
    получаю ошибку
    "Отсутствует внешняя точка для выхода из цикла или продолжения"
 
    усли указать
    return proxy;
    "Не удается преобразовать "лямбда-выражение" в тип делегата "System.Action<int>", так как некоторые типы возвращаемого значения в блоке не являются неявно преобразуемыми в тип возвращаемого значения делегата"
 
  }

//project.SendInfoToLog("", proxy+" Плохая прокси", true);
  });

сделал через вызов ошибки
throw new Exception("Найден прокси");
но это как-то не правильно

Как правильно выходить из цикла при срабатывании условия?
 
1. Через CancellationTokenSource, т.к. это многопоточный перебор, и надо дать всем потокам знать, что пора тормозить.

https://docs.microsoft.com/en-us/do.../how-to-cancel-a-parallel-for-or-foreach-loop

2. ParallelLoopState Break или Stop
C#:
Развернуть Свернуть Копировать
Parallel.For(0, count, (x , parallelLoopState) =>
{
    if (что-то)
        parallelLoopState.Stop();
});
 
Последнее редактирование:
  • Спасибо
Реакции: inotoxic

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)