C#,并行For循环内的For循环无法正常工作

时间:2018-06-27 09:25:13

标签: c# for-loop webforms parallel-for

这是我的代码,无法正常工作。

从0到UrlList计数的正常for循环。也许是1500年-2000年;

每10个循环后,控制会话。如果不存在或超时,请刷新。并且这一点首先并行循环正常工作。 i = 10,x = 0至9。

然后,并行不工作。我正在用“添加手表”观看x。 x不变。第一个循环中的最后一个数字保持不变。

我该怎么办?

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 个答案:

答案 0 :(得分:3)

let的第二个参数是“ to”(不包括)值,而不是“重复次数”:

Parallel.For

在您的代码中,这意味着在第一次迭代之后,from将等于或大于to值。

因此您的代码应为:

public static ParallelLoopResult For(
    int fromInclusive,
    int toExclusive,
    Action<int> body
)

答案 1 :(得分:2)

您似乎对范围有疑问;取决于您想要的是什么

 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);
   }
 }