读书人

Parallel.For无法continue怎么处理

发布时间: 2013-10-24 18:27:21 作者: rapoo

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类似的方法来进行线程间安全控制

读书人网 >C#

热点推荐