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

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

async/await的實質理解

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

async/await的實質理解

async/await關鍵字能幫助開發者更容易地編寫異步代碼。但不少開發者對于這兩個關鍵字的使用比較困惑,不知道該怎么使用。本文就async/await的實質作簡單描述,以便大家能更清楚理解。

一、async的實質

async的實質是告訴調用者,async標記的方法可能包含異步代碼。具體來說,以wait以分界點,async標記的方法被分為三個片段:

static async void TestAsyncMethod(){   someCode1(); //片段1   await Thask.Run(...); //片段2   comeCode3(); //片段3}
View Code
  • 代碼片段1與調用者同屬一個線程,屬同步代碼。
  • 代碼片段2表示await引起的異步代碼,另起一個線程。
  • 代碼片段3在await之后,表示該異步代碼后的回調代碼。

這3個代碼片段順序固定,但均不要求一定出現。

二、await的實質

await一定出現在async標記的代碼中,表示后面掛起一段線程代碼,而await異步代碼后在代碼均表示回調代碼。代碼示意如下:

await 異步代碼;回調代碼;
View Code

await掛起的異步代碼通常有3種情況:

  • await后調用async標記的方法
  • await Task.Run(...);
  • await Task<TResult>.Run(...);

三、代碼示例

1、async中只有同步代碼

代碼:

        static void Main(string[] args)        {            Console.Title = "Async/Await測試";            MyAsync1();            Console.WriteLine("Test1");            Console.ReadLine();        }        static async void MyAsync1()        {            Console.WriteLine("Test2");            Thread.Sleep(TimeSpan.FromSeconds(2));            Console.WriteLine("Test3");        }
View Code

輸出結果:

Test2Test3Test1

2、async中含有異步代碼

代碼:

        static void Main(string[] args)        {            Console.Title = "Async/Await測試";            MyAsync2();            Console.WriteLine("Test1");            Console.ReadLine();        }        static async void MyAsync2()        {            Console.WriteLine("Test4");            Console.WriteLine(await Task<string>.Run(() =>            {                Thread.Sleep(TimeSpan.FromSeconds(2));                return "Tao";            }));            Console.WriteLine("Test5");        }
View Code

輸出結果:

Test4Test1TaoTest5


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桓仁| 大名县| 马公市| 沙雅县| 睢宁县| 涞水县| 珠海市| 响水县| 雷山县| 佛山市| 金溪县| 博白县| 英山县| 秦安县| 朝阳市| 化德县| 柏乡县| 宝鸡市| 临颍县| 云安县| 泰宁县| 普宁市| 鄂伦春自治旗| 那坡县| 甘谷县| 嘉禾县| 城固县| 会理县| 大姚县| 嘉黎县| 桓台县| 普陀区| 津南区| 威信县| 灌云县| 葵青区| 洛宁县| 双鸭山市| 康定县| 靖西县| 浦城县|