C#, для цикла внутри параллели для цикла не работает правильно
Это мой код, и он не работает правильно.
Нормально для цикла от 0 до UrlList Count. Возможно 1500 - 2000;
После каждого 10 цикла, управляющего сеансом. Если не существует или тайм-аут, собирается и обновить. И эта точка первого параллельного цикла работает правильно. я = 10 и х = от 0 до 9.
А потом параллельно не работает. Я смотрю с "добавить часы" для х. х не меняется. Последнее число в первом цикле остается тем, чем оно является.
Что я могу сделать?
TokenController control = new TokenController();
for (int i = 0; i < UrlList.Count; i++)
{
if(control.SessionControl(false, 0))
{
Parallel.For(i, 10, x => {
//HttpRequest
});
i += 9;
}
}
2 ответа
Второй параметр для Parallel.For
это значение "to" (исключающее), а не "количество повторений":
public static ParallelLoopResult For(
int fromInclusive,
int toExclusive,
Action<int> body
)
В вашем коде это означает, что после первой итерации значение from будет равно или больше значения to.
Итак, ваш код должен быть:
Parallel.For(i, i + 10, x => {
//HttpRequest
});
Кажется, у вас есть проблемы с диапазонами; в зависимости от того, что вы хотите, это либо
for (int i = 0; i < UrlList.Count; i++) {
// at 0th, 10th, 20th ... N * 10 ... position
if (i % 10 == 0) {
// Control session:
// HttpRequest ...
}
}
или же
int step = 10;
for (int i = 0; i < UrlList.Count; ++i) {
// Control session can appear at any moment, indepent on i
if (control.SessionControl(false, 0)) {
// When we at i-th postion we want 10 loops more: i + step
// not from i to step
Parallel.For(i, i + step, x => {
//HttpRequest
});
i += (step - 1);
}
}