原文: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");});}


最后:这是我个人的理解和总结,欢迎大家来讨论或指教

async和await用法相关推荐

  1. 浅谈async函数await用法

    async和await相信大家应该不陌生,让异步处理变得更友好. 其实这玩意儿就是个Generator的语法糖,想深入学习得去看看Generator,不然你可能只停留在会用的阶段. 用法很简单,看代码 ...

  2. ES6中的promise、async、await用法详解

    <!DOCTYPE html> <html> <head><title>Promise.async.await</title> </h ...

  3. async和await的用法

    一.async&await用法 async 表示函数里有异步操作, await 表示紧跟在后面的表达式需要等待结果. 同 Generator 函数一样,async 函数返回一个 Promise ...

  4. vue中异步函数async和await的用法

    先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 as ...

  5. 理解异步函数async和await的用法

    定义 async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的执行不会阻塞后面代码的执行:而 await 用于等待一个异步方法执行完成: async/await的作用就是 ...

  6. async/await用法详解

    ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async函数的定义方式 // 函数声明 async function fn() {}// 函数表达式 const fn = a ...

  7. C#-深入理解async和await的作用及各种适用场景和用法

    第十五节:深入理解async和await的作用及各种适用场景和用法 一. 同步VS异步 1.   同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调 ...

  8. C# 中的Async 和 Await 的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...

  9. 【转载】 C# 中的Async 和 Await 的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...

  10. 第十五节:深入理解async和await的作用及各种适用场景和用法

    一. 同步VS异步 1.   同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调用时无须等待返回结果,可以继续往下执行业务 开启新线程:在主线程之外 ...

最新文章

  1. 【PHPExcel】生成Excel2007文件并下载
  2. 周炯槃 信息理论基础
  3. python编码读法-python的读法
  4. mysql外键约束语句级连_mysql之外键约束(级联操作等) 父表子表
  5. linux下raid磁盘阵列的命名,linux – mdadm – raid设备名称在重新启动时更改
  6. 对 makefile 中 $(MAKE) 的学习体会
  7. 委外订单_听听晚报-英特尔扩大芯片委外订单、苹果秋季或举行两场发布会
  8. .Net Core + 微信赋能企业级智能客服系统--学习笔记
  9. java heroku_Heroku和Java –从新手到初学者,第1部分
  10. Lync和Exchange 2013集成PART4:配置统一存档
  11. Mac 中 PyCharm 配置 Anaconda环境
  12. linux搜索文件中包含的字符
  13. 代码安全审计工具推荐
  14. 2022危险化学品生产单位安全生产管理人员考试试题模拟考试平台操作
  15. Java设计模式(思维导图)
  16. ramda 函数 relation type
  17. 苹果手机文件夹中服务器连接在哪,如何访问苹果手机上的共享文件夹?
  18. Movist Pro for Mac 2.2.16 — 播放器
  19. 微信小程序豆瓣电影学习知识总结
  20. 芯片常见的三种封装形式

热门文章

  1. wpf treeview使用expanded事件出错的问题
  2. 「mac软件教程」:在 Mac 上免费减小 PDF 文件大小
  3. Html5 video 标签中视频有声音没画面问题解决过程
  4. 如何快速制作短视频?拥有这个神器,轻松搞定!
  5. java 伪造http请求ip地址
  6. (宇哥云端)互联网+
  7. 利用Docker快速部署Oracle环境
  8. 在eclipse上搭建和运行solr项目
  9. centos7 zabbix
  10. 如何用编程方式实现创建一个页面并替换掉站点首页