国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 铜山县| 宁海县| 丹巴县| 班戈县| 伊金霍洛旗| 河源市| 沂南县| 阜阳市| 岢岚县| 锦州市| 温州市| 雷山县| 宜州市| 南川市| 平顺县| 信丰县| 银川市| 旬阳县| 乌苏市| 东海县| 顺昌县| 洛阳市| 南靖县| 阿拉尔市| 郯城县| 宝鸡市| 临泉县| 玉田县| 宁晋县| 海淀区| 柳州市| 宁海县| 乐平市| 永昌县| 茶陵县| 万宁市| 河北省| 临夏县| 宁远县| 平顺县| 鄢陵县|