国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄石市| 微博| 封丘县| 察哈| 汽车| 高碑店市| 丹东市| 兰考县| 神池县| 湖南省| 五家渠市| 原平市| 岚皋县| 应城市| 南召县| 肥西县| 彩票| 衡山县| 滦平县| 合山市| 昌黎县| 麻城市| 田林县| 万山特区| 徐汇区| 仙游县| 济阳县| 承德县| 天峻县| 合阳县| 大宁县| 遵义县| 潮安县| 金乡县| 太康县| 玛沁县| 涟源市| 微山县| 青岛市| 建阳市| 青岛市|