温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

并行计算中的停止stop和跳出 break

发布时间:2020-06-29 11:10:15 来源:网络 阅读:726 作者:eryongyan 栏目:编程语言

由于并行计算中的停止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);

                    }

                }

                );

执行结果可能如下:

并行计算中的停止stop和跳出 break

当i=6时,调用stop方法,

但直到i=10,循环体才停止。

因此,我们要用LoopState.IsStopped属性来判断是否调用了stop方法,如果调用,则对满足条件下的,才会继续执行。

执行结果如下(为可能结果),符合我们的要求

并行计算中的停止stop和跳出 break

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);

                    }

                }

                );

并行计算中的停止stop和跳出 break

L

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI