您好,登录后才能下订单哦!
由于并行计算中的停止stop和跳出 break,跟单线程中有所不同,所以需要重点理解一下.
停止stop,因为是多线程,所以当调用stop时,此循环体没有立即退出,还会有一两个线程会继续执行。
所以有可能会达不到我们的要求。
例如:
List<int> list = new List<int>();
for (int i = 0; i < 20; i++)
{
list.Add(i);
}
Console.WriteLine("Stop");
Parallel.For(0, list.Count,
(i, LoopState) =>
{
Thread.Sleep(500);
Console.WriteLine(i);
if (i > 5) LoopState.Stop();
// if (LoopState.IsStopped == false)
{
Console.WriteLine(" ............." + i);
}
}
);
执行结果可能如下:
当i=6时,调用stop方法,
但直到i=10,循环体才停止。
因此,我们要用LoopState.IsStopped属性来判断是否调用了stop方法,如果调用,则对满足条件下的,才会继续执行。
执行结果如下(为可能结果),符合我们的要求
break,跳出当前循环,经过执行结果我们发现,也存在其他线程未跳出循环的情况
所以不能只依靠break了,我们自己要把可以执行的代码放在if代码段中。
Console.WriteLine("Break");
Parallel.For(0, list.Count,
(i, LoopState) =>
{
Console.WriteLine(i);
Thread.Sleep(500);
if (i > 5) LoopState.Break();
{
Console.WriteLine("----------" + i);
}
}
);
改为
Console.WriteLine("Break");
Parallel.For(0, list.Count,
(i, LoopState) =>
{
Console.WriteLine(i);
Thread.Sleep(500);
if (i > 5) LoopState.Break();
else//加上else
{
Console.WriteLine("----------" + i);
}
}
);
L
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。