async/await的实质理解

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航