原文:async和await用法

要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。

如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:

  1. 只有在async方法里面才能使用await操作符;
  2. await操作符是针对Task对象的;
  3. 当方法A调用方法B,方法B方法体内又通过await调用方法C时,如果方法C内部有异步操作,则方法B会等待异步操作执行完,才往下执行;但方法A可以继续往下执行,不用再等待B方法执行完。

对于第三点说的有点绕,所以下面结合代码说一下:

        static void Main(string[] args)
{
Test();
Console.WriteLine("Test End!");
Console.ReadLine();
} static async void Test()
{
await Test1();
Console.WriteLine("Test1 End!");
} static Task Test1()
{
Thread.Sleep(1000);
Console.WriteLine("create task in test1"); return Task.Run(() =>
{
Thread.Sleep(3000);
Console.WriteLine("Test1");
});
}

执行结果:

对结果解释是:

  Main方法调用具有async标示的Test方法,Test方法通过await调用Test1方法,当执行顺序执行到Test1时,遇到里面的异步操作;则Test方法会等待Test1里面的异步操作执行完再往下执行;但是Main方法,不用再等待Test方法执行,可以继续往下执行。


对于上面情况,可以不使用async和await也能实现,代码如下:

        static void Main(string[] args)
{
Test();
Console.WriteLine("Test End!");
Console.ReadLine();
} static void Test()
{
var test1=Test1(); Task.Run(() =>
{
test1.Wait();
Console.WriteLine("Test1 End!");
});
} static Task Test1()
{
Thread.Sleep(1000); Console.WriteLine("create task in test1"); return Task.Run(() =>
{
Thread.Sleep(3000);
Console.WriteLine("Test1");
});
}

最新文章

  1. shll 变量
  2. C# winform窗体设计-查询单个值
  3. python字符串格式化输出
  4. AC日记——津津的储蓄计划 P1089 (水!)
  5. 解决eclipse svn插件 的lock问题
  6. static详解
  7. swift通过摄像头读取每一帧的图片,并且做识别做人脸识别
  8. IEnumerable和IEnumerator 详解 【转】
  9. django 简易博客开发 1 安装、创建、配置、admin使用(转)
  10. Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal
  11. asp中的动态数组
  12. 【CodeVs 6128 Lence的方块们】
  13. 使用LRU算法缓存图片,android 3.0
  14. vue路由守卫(全局守卫)
  15. python中shelve模块的使用
  16. java线程池如何合理的设置大小
  17. Java中使用FileputStream导致中文乱码问题的修改方案
  18. [LeetCode] 443. String Compression_Easy tag:String
  19. CloudFlare防护下的破绽:寻找真实IP的几条途径
  20. Mac OS下安装mvn

热门文章

  1. IIS 使用域账户访问SQL 需要配置
  2. ASP.NET MVC + EF 更新的几种方式
  3. MySQL 聚合函数以及 优先级
  4. Python:time模块、calendar模块
  5. saltstack---自动化运维平台
  6. MySQ数据表设计
  7. iOS 限制输入字数
  8. linux学习:【第2篇】常用命令
  9. python武器库
  10. spring.schemas和spring.handlers对xmlns配置文件作用