C#,For 循环内部并行 For 循环无法正常工作
C#, For Loop Inside Parallel For Loop Not Working Correctly
这是我的代码,无法正常工作。
从 0 到 UrlList 计数的正常 for 循环。也许 1500 - 2000;
每10个循环后,控制会话。如果不存在或超时,则继续刷新。而这一点第一个并行循环正常工作。
i = 10 和 x = 在 0 和 9 之间。
后来,并行不工作。我正在用 "add watch" 观看 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;
}
}
Parallel.For
的第二个参数是"to"(不包括)值,不是"number of repetitions":
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);
}
}
这是我的代码,无法正常工作。
从 0 到 UrlList 计数的正常 for 循环。也许 1500 - 2000;
每10个循环后,控制会话。如果不存在或超时,则继续刷新。而这一点第一个并行循环正常工作。 i = 10 和 x = 在 0 和 9 之间。
后来,并行不工作。我正在用 "add watch" 观看 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;
}
}
Parallel.For
的第二个参数是"to"(不包括)值,不是"number of repetitions":
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);
}
}