溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

并行計(jì)算中的停止stop和跳出 break

發(fā)布時(shí)間:2020-06-29 11:10:15 來(lái)源:網(wǎng)絡(luò) 閱讀:712 作者:eryongyan 欄目:編程語(yǔ)言

由于并行計(jì)算中的停止stop和跳出 break,跟單線程中有所不同,所以需要重點(diǎn)理解一下.

停止stop,因?yàn)槭嵌嗑€程,所以當(dāng)調(diào)用stop時(shí),此循環(huán)體沒有立即退出,還會(huì)有一兩個(gè)線程會(huì)繼續(xù)執(zhí)行。

所以有可能會(huì)達(dá)不到我們的要求。

例如:

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

                    }

                }

                );

執(zhí)行結(jié)果可能如下:

并行計(jì)算中的停止stop和跳出 break

當(dāng)i=6時(shí),調(diào)用stop方法,

但直到i=10,循環(huán)體才停止。

因此,我們要用LoopState.IsStopped屬性來(lái)判斷是否調(diào)用了stop方法,如果調(diào)用,則對(duì)滿足條件下的,才會(huì)繼續(xù)執(zhí)行。

執(zhí)行結(jié)果如下(為可能結(jié)果),符合我們的要求

并行計(jì)算中的停止stop和跳出 break

break,跳出當(dāng)前循環(huán),經(jīng)過執(zhí)行結(jié)果我們發(fā)現(xiàn),也存在其他線程未跳出循環(huán)的情況

所以不能只依靠break了,我們自己要把可以執(zhí)行的代碼放在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);

                    }

                }

                );

并行計(jì)算中的停止stop和跳出 break

L

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI