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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#~異步編程再續(xù)~async異步方法與同步方法的并行

2019-11-14 14:00:36
字體:
供稿:網(wǎng)友

并行編程awit&async相關(guān)文章

C#異步編程

今天晚上沒事寫了個測試的代碼,又看了看.net的并行編程,兩個方法,一個是異步async修飾的,另一個是普通的方法,在控制臺程序的Main方法里去調(diào)用這兩個方法,會有什么結(jié)果呢?

首先我們看一下方法的組成,step1如下

 public async void Step1()        {            try            {                //await進(jìn)行等待后,新線程的異常可以被主線程捕捉,這是正常的,下面的代碼不會被執(zhí)行                await Task.Run(() =>                {                    Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);                    Thread.Sleep(3000);                });                await Task.Run(() =>                {                    Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);                    Console.WriteLine("ThreadTest.Test Runing");                });            }            catch (Exception ex)            {                Console.WriteLine("ThreadTest" + ex.Message);            }        }

step2如下

 public void Step2()        {            Console.WriteLine("Step2 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);        }

我們可以看到step2很簡單,不會有什么延時,就是在屏幕上輸出一段話,而step1就顯得復(fù)雜一些了,它是一個異步的方法,并且使用Task.Run開啟了兩個新線程,而第一

個線程的運(yùn)行時間是3秒,很長呀,哈哈,第二個是在屏幕上輸出一段話!現(xiàn)在我們把step1和step2寫在一起會出現(xiàn)什么情況呢?

 var test = new ThreadTest(); test.Step1();//整個方法不阻塞,但方法內(nèi)部有可能阻塞 test.Step2();

通過上面的圖我們認(rèn)識到了,step1按著順序先執(zhí)行,而由于第一個線程要執(zhí)行3秒,這時step2被并行執(zhí)行,3秒后,step1的第二個線程繼續(xù)執(zhí)行(由于使用了await,所以step1內(nèi)部進(jìn)行了等待,不會應(yīng)響他外面的方法,也應(yīng)響不了,呵呵!

怎么了,看了上面的例如,是不是對并行編程有了新的認(rèn)識呢!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泊头市| 保亭| 建昌县| 桃园县| 铜梁县| 临猗县| 金塔县| 佛坪县| 溧阳市| 永清县| 闵行区| 道真| 灵台县| 惠水县| 章丘市| 册亨县| 奇台县| 松原市| 原平市| 普宁市| 阳新县| 通州市| 清镇市| 武平县| 土默特左旗| 会同县| 寻乌县| 清河县| 封开县| 凉山| 当雄县| 大姚县| 韶山市| 碌曲县| 武宣县| 上杭县| 郓城县| 开鲁县| 马山县| 延长县| 宜良县|