标签:
传统的异步是利用回调函数来写的,写过的人都知道,,那样写的结构东一块西一块的,很不好找。
所以在这里整理啦一下asyns和await实现的异步。。。
asyns和await的异步不是很好理解。在这里,我在注释中,将细细的标明
class Program { // ---------------规范说明----------------------------- //1.用async标识的方法即为异步方法,异步方法的返回值只能是void或者Task<object>,---返回值是void的方法,不能使用await调用。注意你的返回类型 //2.在其他方法中调用异步方法时,可以加await,表示等待这个异步方法结束。 异步的关键点就在这个await //3.await标签只能写在异步方法中 //4.await标识并调用的方法中,也必须要有await才行 static void Main(string[] args) { //第一步,写了一个 “1” Console.WriteLine("1"); Paint(); //第三步----2,写了一个 “5” Console.WriteLine("5"); Console.ReadLine(); } //此方法是已经标明是异步方法 async static void Paint() { //第二步,写了一个“2” Console.WriteLine("2"); //第三步--1,代码发现await字段,整个方法将直接返回, 并在这个await这里加个标签,所以第三步输出的是“5” //等到 RequestBody方法返回值时,再次进入Paint方法中,并且直接从这个await字段处运行, //-----------------------------等待一秒---------这时候,已经输出了“5” //一秒后RequestBody方法返回值了,RequestBody的返回类型应该是Task<string>, //但是,用了await之后,返回值直接就是string //并且,输出“4”的操作被await阻塞 Console.WriteLine(await RequestBody()); Console.WriteLine("4"); } async static Task<string> RequestBody() { //被await调用的方法中,必须要有await return await Task.Run(() => { Thread.Sleep(2000); return "3"; }); } }
标签:
原文地址:http://www.cnblogs.com/xiaoleye/p/4976446.html