首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Parallel.For无法continue怎么处理

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

热点排行