标签:
async/await关键字能帮助开发者更容易地编写异步代码。但不少开发者对于这两个关键字的使用比较困惑,不知道该怎么使用。本文就async/await的实质作简单描述,以便大家能更清楚理解。
async的实质是告诉调用者,async标记的方法可能包含异步代码。具体来说,以wait以分界点,async标记的方法被分为三个片段:
static async void TestAsyncMethod() { someCode1(); //片段1 await Thask.Run(...); //片段2 comeCode3(); //片段3 }
这3个代码片段顺序固定,但均不要求一定出现。
await一定出现在async标记的代码中,表示后面挂起一段线程代码,而await异步代码后在代码均表示回调代码。代码示意如下:
await 异步代码; 回调代码;
await挂起的异步代码通常有3种情况:
代码:
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"); }
输出结果:
Test2
Test3
Test1
代码:
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"); }
输出结果:
Test4
Test1
Tao
Test5
标签:
原文地址:http://www.cnblogs.com/huatao/p/4642690.html