C#~非同步編程再續~async非同步方法呼叫與同步方法的並行

來源:互聯網
上載者:User

標籤:

並行編程awit&async相關文章

C#非同步編程

今天晚上沒事寫了個測試的代碼,又看了看.net的並行編程,兩個方法,一個是非同步async修飾的,另一個是普通的方法,在控制台程式的Main方法裡去調用這兩個方法,會有什麼結果呢?

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

 public async void Step1()        {            try            {                //await進行等待後,新線程的異常可以被主線程捕捉,這是正常的,下面的代碼不會被執行                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就顯得複雜一些了,它是一個非同步方法,並且使用Task.Run開啟了兩個新線程,而第一

個線程的已耗用時間是3秒,很長呀,哈哈,第二個是在螢幕上輸出一段話!現在我們把step1和step2寫在一起會出現什麼情況呢?

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

通過上面的圖我們認識到了,step1按著順序先執行,而由於第一個線程要執行3秒,這時step2被並存執行,3秒後,step1的第二個線程繼續執行(由於使用了await,所以step1內部進行了等待,不會應響他外面的方法,也應響不了,呵呵!

怎麼了,看了上面的例如,是不是對並行編程有了新的認識呢!

C#~非同步編程再續~async非同步方法呼叫與同步方法的並行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.