亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

c# 多線程系列二 自定義線程執行器

2019-11-17 02:31:55
字體:
來源:轉載
供稿:網友

c# 多線程系列二 自定義線程執行器

看了第一篇文章,多線程系列,看到了在線程執行任務隊列有了一定的了解~!

那么今天我來講講,怎么樣構建通用的自定義線程概念!

線程執行任務,肯定要有目標,但是如果寫死了,那么一個線程處理執行職能按照思路處理一類任務,顯然不滿足我們的實際場景的需求,那么怎么才能創建靈活的線程執行器呢!

首先我們來創建一個任務構造器!

 1   /// <summary> 2     /// 線程模型執行任務 基類 3     /// </summary> 4     public abstract class BaseTask 5     { 6  7         /// <summary> 8         /// 任務ID 9         /// </summary>10         public long TID { get; set; }11 12         /// <summary>13         /// 任務名稱14         /// </summary>15         public string TName { get; set; }16 17         /// <summary>18         /// 線程模型任務19         /// </summary>20         public abstract void Run();21 22         public override string ToString()23         {24             return "Task<" + this.TName + "(" + TID + ")>";25         }26     }

看到這里,可能不會明白,這么寫法的意義在哪里呢?

那么我們再來自定義線程的執行器

 1 /// <summary> 2     /// 定義自定義線程模型 3     /// </summary> 4     public abstract class BaseThread<T> where T : BaseTask 5     { 6         //執行線程 7         Thread _Thread; 8         //通知一個或多個正在等待的線程已發生事件 9         ManualResetEvent mre = new ManualResetEvent(false);10         //線程安全的隊列11         System.Collections.Concurrent.ConcurrentQueue<T> cqueue = new System.Collections.Concurrent.ConcurrentQueue<T>();12 13         /// <summary>14         /// 自定義線程ID;15         /// </summary>16         public long TID { get; set; }17 18         public static bool IsRuning = true;19 20         /// <summary>21         /// 初始化22         /// </summary>23         /// <param name="tName">線程的名稱</param>24         public BaseThread(string tName)25         {26             _Thread = new Thread(Runing);27             _Thread.Name = tName;28             _Thread.Start();29         }30 31         //模擬新增任務32         public void AddTask(T task)33         {34             //添加任務到隊列35             cqueue.Enqueue(task);36             //喚醒所有相關的掛起線程37             mre.Set();38         }39 40         void Runing()41         {42             //主循環 服務器運行標識43             while (IsRuning)44             {45                 //如果是空則繼續等待      服務器運行標識46                 while (cqueue.IsEmpty && IsRuning)47                 {48                     //重置線程暫停狀態49                     mre.Reset();50                     //這個操作是以便服務器需要停止操作,51                     //如果停止調用線程的Thread.Abort()是會導致處理隊列任務丟失52                     mre.WaitOne(2000);53 #if DEBUG54                     //為了方便測試信息打印的暫停信息55                     Console.WriteLine(DateTime.Now.ToString("HH:mm:ss:ffff") + " : " + Thread.CurrentThread.Name + " Status Sleep");56 #endif57                 }58                 T t;59                 //取出隊列任務60                 if (cqueue.TryDequeue(out t))61                 {62                     Runing(t);63                 }64             }65         }66 67         /// <summary>68         /// 設置運行方法為虛方法,方便子函數覆蓋69         /// </summary>70         PRotected virtual void Runing(T run)71         {72             try73             {74                 //執行任務75                 run.Run();76                 //打印任務信息77                 Console.WriteLine(DateTime.Now.ToString("HH:mm:ss:ffff") + " : " + Thread.CurrentThread.Name + " Action:" + run.ToString());78             }79             catch (Exception ex)80             {81                 //打印任務信息82                 Console.WriteLine(DateTime.Now.ToString("HH:mm:ss:ffff") + " : " + Thread.CurrentThread.Name + " Action:" + run.ToString() + " Exception:" + ex);83             }84         }85     }

看到這里是不是比較清楚了?這樣我們定義的線程是不是能完成多不同類型的任務呢?

是不是可以做到一個線程執行和處理不同類型的任務呢?

接下來我們創建類型的實現類

任務實現類1

 1 /// <summary> 2     /// 測試任務 3     /// </summary> 4     public class TestTask : BaseTask 5     { 6  7         public override void Run() 8         { 9             Console.WriteLine("我只是用來測試的");10         }11     }

任務實現類2

 1 public class TestTask1 : BaseTask 2     { 3  4         /// <summary> 5         /// 執行任務 6         /// </summary> 7         public Action Test { get; set; } 8  9         public override void Run()10         {11             if (Test != null)12             {13                 Test();14             }15             Console.WriteLine("我只是用來測試的");16         }17     }

線程的實現類

 1     /// <summary> 2     /// 測試線程 3     /// </summary> 4     public class TestThread : BaseThread<BaseTask> 5     { 6         public TestThread() 7             : base("TestThread") 8         { 9 10         }11     }

接下來我們看看測試效果

 1     class Program 2     { 3  4         static void Main(string[] args) 5         { 6             TestThread tt = new TestThread(); 7             tt.AddTask(new TestTask() { TID = 1, TName = "測試1" }); 8             tt.AddTask(new TestTask1() { TID = 2, TName = "測試2" }); 9             tt.AddTask(new TestTask1() { TID = 2, TName = "測試3", Test = new Action(() => { Console.WriteLine("我要暫停3秒鐘"); Thread.Sleep(3000); }) });10             tt.AddTask(new TestTask() { TID = 3, TName = "測試4" });11             Console.ReadLine();12         }13     }

運行結果圖

看到這里是不是很清楚明了呢?這樣我們在處理日常任務的時候,不同類型的邏輯或者任務類型,是不是都可以放到一個線程執行呢?

請大家期待我的下一篇文章,為大家講解,定時器線程執行器,


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区国产精品视频| 国产精品视频不卡| 国产成人一区二区在线| 亚洲影视中文字幕| 成人激情视频在线| 精品久久中文字幕久久av| 久久久久久久久久av| 欧美极品美女电影一区| 日韩在线资源网| 国产丝袜一区视频在线观看| 日韩精品极品视频免费观看| 日韩电影免费在线观看中文字幕| 国产精品久久97| 中文字幕日韩av| 日韩美女在线观看一区| 午夜精品一区二区三区视频免费看| 一级做a爰片久久毛片美女图片| 国内精久久久久久久久久人| 在线不卡国产精品| 亚洲电影免费观看高清完整版在线观看| 成人国产在线激情| 97色伦亚洲国产| 精品偷拍一区二区三区在线看| 亚洲精品网址在线观看| 中文字幕亚洲综合| 国产精品综合不卡av| 成人女保姆的销魂服务| 亚洲wwwav| 亚洲小视频在线观看| 久久精品视频网站| 91地址最新发布| 欧美日韩在线免费观看| 亚洲aⅴ日韩av电影在线观看| 国产欧美日韩视频| 久久精品国产99国产精品澳门| 久热爱精品视频线路一| 国产精品久久久久福利| 日韩成人在线电影网| 日韩三级成人av网| 琪琪第一精品导航| 北条麻妃一区二区在线观看| 日韩人在线观看| 亚洲片在线观看| 日韩在线激情视频| 亚洲精品99久久久久中文字幕| 国产精品自拍偷拍| 亚洲护士老师的毛茸茸最新章节| 欧美又大粗又爽又黄大片视频| 欧美人与性动交| 欧美激情亚洲另类| 日韩av在线资源| 日韩美女av在线| 欧美亚洲国产成人精品| 日韩视频在线免费| 久久国产加勒比精品无码| 国产精品久久久久一区二区| 草民午夜欧美限制a级福利片| 亚洲精品999| 久久伊人色综合| 国模精品视频一区二区三区| 亚洲一区二区中文字幕| 国产精品ⅴa在线观看h| 久久精品免费电影| 精品视频在线导航| 26uuu另类亚洲欧美日本一| 国产伦精品免费视频| 欧美日韩精品在线| 国产一区二区三区视频免费| 国产欧美va欧美va香蕉在线| 欧美精品电影免费在线观看| 国产日本欧美一区二区三区| 精品久久久久久久大神国产| 国产这里只有精品| 欧美日韩在线视频观看| 亚洲综合自拍一区| 国产亚洲欧美日韩精品| 成年无码av片在线| 7m第一福利500精品视频| 久久夜精品香蕉| 国产综合在线观看视频| 国产精品影院在线观看| 亚洲国产天堂久久综合网| 日韩高清电影好看的电视剧电影| 久久久女人电视剧免费播放下载| 日韩精品黄色网| www.欧美三级电影.com| 成人免费网站在线观看| 国产精品久久久久高潮| 成人xvideos免费视频| 亚洲国产精久久久久久| 国产精品ⅴa在线观看h| 久久久久久久久久久网站| 日韩精品免费视频| 亚洲影影院av| 亚洲色图17p| 一区国产精品视频| 久久久久五月天| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品成人久久| 国产精品久久久久77777| 欧美大片第1页| 国产婷婷色综合av蜜臀av| 黄色精品在线看| 国产欧美最新羞羞视频在线观看| 欧美不卡视频一区发布| 亚洲福利视频网| 亚洲经典中文字幕| 色偷偷噜噜噜亚洲男人的天堂| 中文字幕一精品亚洲无线一区| 色综合视频网站| www.xxxx欧美| 91精品国产色综合久久不卡98口| 欧美影院成年免费版| 精品视频久久久久久久| 亚洲欧美另类在线观看| 奇米影视亚洲狠狠色| 久久国产精品久久国产精品| 日本精品一区二区三区在线播放视频| 精品中文字幕视频| 久久噜噜噜精品国产亚洲综合| 久久精品青青大伊人av| 亚洲精品久久视频| 日韩av色在线| 亚洲欧洲免费视频| 98精品在线视频| 国产精品高潮呻吟久久av黑人| 亚洲欧美综合另类中字| 亚洲免费中文字幕| 久久久久久久香蕉网| 亚洲欧美精品中文字幕在线| 国产欧美日韩丝袜精品一区| 欧美成人一二三| 欧美激情中文字幕乱码免费| 久久久国产精品亚洲一区| 精品丝袜一区二区三区| 日韩精品视频免费在线观看| 九九热视频这里只有精品| 高清视频欧美一级| 日本精品视频网站| 成人黄色av网站| 欧美日韩中文字幕在线视频| 日韩电影中文字幕在线观看| 中文字幕一区电影| 亚洲精品自拍第一页| 色先锋资源久久综合5566| 欧美极品美女视频网站在线观看免费| 欧美日韩国产在线看| 久久久久久久久久久av| 色哟哟亚洲精品一区二区| 亚洲性夜色噜噜噜7777| 欧美中文字幕在线播放| 国产一区二区三区视频在线观看| 亚洲自拍偷拍一区| 久久久久久有精品国产| 最近2019年日本中文免费字幕| 欧美一区三区三区高中清蜜桃| 国产99视频精品免视看7| 亚洲精品国产欧美| 亚洲欧美日韩久久久久久| 乱亲女秽乱长久久久| 欧美超级免费视 在线| 欧美性猛交xxxx乱大交3| 亚洲欧洲日韩国产| 亚洲欧美日本伦理|