国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ParallelProgramming-Parallel.Invoke

2019-11-14 13:49:26
字體:
來源:轉載
供稿:網友

本文主要介紹Parallel.Invoke的使用。

一、使用例子

 class ParallelInvoke    {        public void Action1()        {            Thread.Sleep(3000);            Console.WriteLine("in action1");        }        public void Action2()        {            Thread.Sleep(3000);            Console.WriteLine("in action2");        }        public void ParallelAction()        {            Parallel.Invoke(() => Action1(), () => Action2());        }    }
 class PRogram    {        static void Main(string[] args)        {            var stopwatch = Stopwatch.StartNew();            stopwatch.Start();            new ParallelInvoke().ParallelAction();            Console.WriteLine(stopwatch.ElapsedMilliseconds);            Console.Read();        }    }

二、 運行截圖

上面的action1和action2如果并行執行至少需要3000*2毫秒,但是使用Invoke,內部并行執行,時間減半。

三、 分析

Parallel.Invoke是最簡單的并行編程模型,用于并行執行多個互不相干的方法。有幾點需要注意

  1. 只有當所有的Action執行完成后Invoke才會返回(WaitAll)
  2. 在執行過程中有其中一個Action發生異常,Invoke不會馬上拋出異常,而是等所有的Action完成以后再次拋出異常

四、one more thing

4.1 MaxDegreeOfParallelism

Parallel.Invoke可以通過指定ParallelOption指定最大并行數量。

    public void ParallelAction()        {            Parallel.Invoke            (                new ParallelOptions()                {                    MaxDegreeOfParallelism = 1,                },                () => Action1(),                () => Action2()            );        }

上面的代碼設置成了1,其實就是串行執行了。

執行時間如下。

 

 

4.2 CancellationSourceToken

同樣可以通過ParallelOption指定CancellationSourceToken,多個并行任務之間可以協調取消

   class ParallelInvoke    {        public void Action1(CancellationTokenSource cts)        {            cts.Cancel();            Thread.Sleep(3000);            Console.WriteLine("in action1");        }        public void Action2(CancellationTokenSource cts)        {            if (cts.IsCancellationRequested)            {                return;            }            Thread.Sleep(3000);            Console.WriteLine("in action2");        }        public void ParallelAction()        {            CancellationTokenSource cts = new CancellationTokenSource();            Parallel.Invoke            (                new ParallelOptions()                {                    CancellationToken = cts.Token,                },                () => Action1(cts),                () => Action2(cts)            );        }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 星座| 同德县| 开鲁县| 始兴县| 朝阳区| 天津市| 康马县| 万荣县| 宁国市| 华亭县| 桂林市| 海宁市| 海原县| 竹溪县| 莎车县| 河南省| 佛学| 左云县| 利津县| 萨嘎县| 武宣县| 子洲县| 济南市| 南宁市| 衡阳县| 衡山县| 常山县| 抚顺市| 库车县| 辽源市| 庄浪县| 桦甸市| 巴中市| 彩票| 永清县| 西乌珠穆沁旗| 翁牛特旗| 吴川市| 砀山县| 临武县| 来安县|