Parallel.For无法continue怎么办[解决办法] Parallel.For(0, r1.LastCol, (i, loopState) {var item m
Parallel.For无法continue怎么办
[解决办法] Parallel.For(0, r1.LastCol, (i, loopState) =>
{ var item = myType.GetProperty(r1.getText(0, i));
if (item == null)
{
loopState.Stop();
break;
}
if (item.Name.Contains("比例"))
{
http://msdn.microsoft.com/zh-cn/library/dd460721.aspx
[解决办法]把loopState.Break();换成
return;[解决办法]Parallel.For(0, r1.LastCol, (i, loopState) =>
{ var item = myType.GetProperty(r1.getText(0, i));
if (item == null)
{
loopState.Stop();
return; //写错了 - -!
}
if (item.Name.Contains("比例"))
{
[解决办法]Parallel.For是并行操作,不是顺序循环,所以那个continue或break是不会有任何效果的。这就好比你开了多个线程,对其中一个线程结束,其它线程照样在for循环你的数组。
[解决办法] Parallel.For(0, r1.LastCol, (i, loopState) =>
{ var item = myType.GetProperty(r1.getText(0, i));
if (item != null && item.Name.Contains("比例"))
这样不行吗?
[解决办法]你根本就瞎用Parallel.For
Parallel.For会为每个迭代开一个任务。你这么写,性能只会非常低。
你得用Parallel.For做一个粗粒度的分割,再在内部使用For
Parallel.For(0, r1.LastCol % 4 == 0 ? 4 : 5 , (i, loopState) =>
{
for (int j = i * r1.LastCol / 4; j < (i + 1) * r1.LastCol / 4; j++)
{
...
}
});
如果你希望中断循环,可以使用一个共享变量
stop = false;
Parallel.For(0, r1.LastCol % 4 == 0 ? 4 : 5 , (i, loopState) =>
{
for (int j = i * r1.LastCol / 4; j < (i + 1) * r1.LastCol / 4 && !stop; j++)
{
...
if (...) stop = true;
}
});
[解决办法]
Parallel.For
这个是多线程啊。。。又不是一个线程内进行for循环。。。。。你的break,continue什么的怎么可能起作用
另外如果像#8楼说的那样控制,那stop = false;这个要通过那个InterLock类似的方法来进行线程间安全控制