麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

[C#]『Barrier』任務并行庫使用小計

2019-11-14 16:47:40
字體:
來源:轉載
供稿:網友

Barrier  是一個對象,它可以在并行操作中的所有任務都達到相應的關卡之前,阻止各個任務繼續執行。 如果并行操作是分階段執行的,并且每一階段要求各任務之間進行同步,則可以使用該對象。 ——MSDN

按照我的理解Barrier其實就是將多個任務同步,而同步需要一個屏障或者是關卡,那么其方法SignalAndWait()就是屏障的作用;

我們來模擬現實中例子,做火車就是很好的參照,大家知道,火車的車次有個發車點,到了那個時間點才能發車,那我們稍微修改下,人到齊后才能發車。

1.首先從家出發,在路上實現:

        PRivate static void OnRoading(string name, int costTime)        {            Console.WriteLine(string.Format("[{0}]在去火車站路上.....,花費{1}小時.", name, costTime));            Thread.Sleep(new TimeSpan(0, 0, costTime));        }

2.達到火車站,等候火車,這相當于同步任務,(所模擬的是,乘火車到人到齊后才能發車)

        private static void OnStationing(string name)        {            Console.WriteLine(string.Format("[{0}]到達火車站,正在安檢等候火車.....", name));            gate.SignalAndWait();        }

3.人到齊后,發車

        private static void OnTraining(string name)        {            Console.WriteLine(string.Format("[{0}]乘坐火車離開.....", name));        }

完整代碼實現

        static Barrier gate;        static void Main(string[] args)        {            try            {                ToStationWorkTyp2();            }            catch (Exception ex)            {                Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));            }            finally            {                Console.ReadLine();            }        }        private static void ToStationWorkTyp2()        {            gate = new Barrier(3);            Task _taskA = Task.Factory.StartNew(() =>            {                OnRoading("personA", 2);                OnStationing("personA");                OnTraining("personA");            });            Task _taskB = Task.Factory.StartNew(() =>            {                OnRoading("personB", 5);                OnStationing("personB");                OnTraining("personB");            });            Task _taskC = Task.Factory.StartNew(() =>            {                OnRoading("personC", 3);                OnStationing("personC");                OnTraining("personC");            });            Task.WaitAll(_taskA, _taskB, _taskC);        }        private static void OnTraining(string name)        {            Console.WriteLine(string.Format("[{0}]乘坐火車離開.....", name));        }        private static void OnStationing(string name)        {            Console.WriteLine(string.Format("[{0}]到達火車站,正在安檢等候火車.....", name));            gate.SignalAndWait();        }        private static void OnRoading(string name, int costTime)        {            Console.WriteLine(string.Format("[{0}]在去火車站路上.....,花費{1}小時.", name, costTime));            Thread.Sleep(new TimeSpan(0, 0, costTime));        }

代碼效果

image

另外一種代碼實現

using System;using System.Collections;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Threading;using System.Threading.Tasks;namespace PLinq{    class Program    {        static Barrier gate;        static void Main(string[] args)        {            try            {                ToStationWorkTyp1();            }            catch (Exception ex)            {                Console.WriteLine(string.Format("Exception Message:{0}", ex.Message.Trim()));            }            finally            {                Console.ReadLine();            }        }        private static void ToStationWorkTyp1()        {            gate = new Barrier(3);            Task _taskA = Task.Factory.StartNew(() => ToStation("PersonA", 2));            Task _taskB = Task.Factory.StartNew(() => ToStation("PersonB", 3));            Task _taskC = Task.Factory.StartNew(() => ToStation("PersonC", 5));            Task.WaitAll(_taskA, _taskB, _taskC);        }        private static void ToStation(string name, int costTime)        {            Console.WriteLine(string.Format("[{0}]在去火車站路上.....,花費{1}小時.", name, costTime));            Thread.Sleep(new TimeSpan(0, 0, costTime));            Console.WriteLine(string.Format("[{0}]到達火車站,正在安檢等候火車.....", name));            gate.SignalAndWait();            Console.WriteLine(string.Format("[{0}]乘坐火車離開.....", name));        }    }}
同樣的實現效果

image


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲成人自拍电影 | 精品一区二区三区日本 | 粉嫩粉嫩一区二区三区在线播放 | 黑人一区二区三区四区五区 | 成人在线高清视频 | 桥本有菜免费av一区二区三区 | 国产成人精品无人区一区 | 免费一级毛片在线播放视频老 | 嫩呦国产一区二区三区av | 一级看片免费视频 | 欧美成人一区二区三区电影 | 蜜桃成品人免费视频 | 毛片免费观看视频 | 国产91对白叫床清晰播放 | 欧美成人午夜一区二区三区 | 色猫av | 国产精品久久久久久久av | 999久久国产| 国产午夜精品久久久久久免费视 | xvideos korean| 91精品国产综合久久婷婷香 | 亚洲欧美日韩一区二区三区在线观看 | 国产一区二区视频网站 | 久久久久久久一区二区三区 | 亚洲精品动漫在线观看 | 久精品国产 | 草久免费 | 日韩视频在线不卡 | 中国精品久久 | 九九热精品视频在线免费观看 | 精品一区二区三区在线观看国产 | 国产1区视频 | 夜添久久精品亚洲国产精品 | 成人午夜精品久久久久久久3d | 91 在线| 欧美淫交 | 天天舔夜夜操 | 亚洲一区国产二区 | 成人福利在线看 | 秋霞a级毛片在线看 | 免费a视频|