博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
教你正确打开async/await关键字的使用
阅读量:7042 次
发布时间:2019-06-28

本文共 2480 字,大约阅读时间需要 8 分钟。

  这段时间在项目开发中看到了一些async/await的使用,在aspnet core的host组件源码中也看到了许多的async/await代码。在开发时,正确的使用了async/await是可以提高程序的性能。下面的代码教你正确的理解await关键字的暂停/阻塞方法调用:

static void Main(string[] args)        {            Console.WriteLine("-------主线程启动-------");            var task = GetStrLengthAsync();            Console.WriteLine("主线程继续执行");            Console.WriteLine("Task返回的值: " + task.Result);            Console.WriteLine("-------主线程结束-------");            Console.Read();        }        static async Task
GetStrLengthAsync() { Console.WriteLine("GetStrLengthAsync方法开始执行"); var str = await GetString(); Console.WriteLine("GetString方法调用结束"); var str1 =await GetStringOne(); Console.WriteLine("GetStringOne方法调用结束"); Console.WriteLine("GetStrLengthAsync方法执行结束"); return str + " ###### " + str1; }      ///await关键字会暂停/阻塞其所在的方法,返回调用 await关键字所在的方法处 继续执行,而不是接着await关键字所在的代码处往下执行,注释下面的代码,查看运行结果即可确认。

      //static async Task<string> GetStrLengthAsync()

      //{
      // Console.WriteLine("GetStrLengthAsync方法开始执行");

 

      // var str = GetString();

      // Console.WriteLine("GetString方法调用结束");

 

      // var str1 = GetStringOne();

      // Console.WriteLine("GetStringOne方法调用结束");

 

      // Console.WriteLine("GetStrLengthAsync方法执行结束");

      // return await str + " ###### " + await str1;
      //}

static async Task
GetString() { Console.WriteLine("GetString方法开始执行"); return await Task.Run(() => { Thread.Sleep(2000); return "GetString的返回值"; }); } static async Task
GetStringOne() { Console.WriteLine("GetStringOne方法开始执行"); return await Task.Run(() => { Thread.Sleep(2000); return "GetStringOne的返回值"; }); }

await关键字会阻塞/暂停它所在的方法。根据结果即可判断:

//主线程启动        //GetStrLengthAsync方法开始执行        //GetString方法开始执行        //主线程继续执行        //GetString方法调用结束        //GetStringOne方法开始执行        //GetStringOne方法调用结束        //GetStrLengthAsync方法执行结束        //Task返回的值:         //主线程结束        //主线程启动        //GetStrLengthAsync方法开始执行        //GetString方法开始执行        //GetString方法调用结束        //GetStringOne方法开始执行        //GetStringOne方法调用结束        //GetStrLengthAsync方法执行结束        //主线程继续执行        //Task返回的值:         //主线程结束

转载于:https://www.cnblogs.com/zhiyong-ITNote/p/9862137.html

你可能感兴趣的文章
nginx的upstream目前支持5种方式的分配
查看>>
kill命令详解
查看>>
python基础
查看>>
手机端问题
查看>>
cat
查看>>
iOS修改工程名
查看>>
The RPC Server is unavailable
查看>>
java基础(二)面向对象
查看>>
07(maven+SSH)网上商城项目实战之springmvc乱码问题
查看>>
HelpDesk/ServiceDesk
查看>>
信息化,让ERP回到自己的势力范围去!
查看>>
网络故障排除精解十例(一)
查看>>
/bin/postconf:error while loading shared libraries:libmysqlclient.so.15
查看>>
ECS Linux 服务器中文乱码如何解决?
查看>>
JQuery事件——鼠标事件
查看>>
CISCO路由器DHCP 配置
查看>>
linux-practice(23-24)
查看>>
zeppelin-0.6.2-bin-all/conf/shiro.ini配置详情
查看>>
Lucene
查看>>
python面向对象——属性
查看>>