async和await用法
要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点。
如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点:
- 只有在async方法里面才能使用await操作符;
- await操作符是针对Task对象的;
- 当方法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用法相关推荐
- 浅谈async函数await用法
async和await相信大家应该不陌生,让异步处理变得更友好. 其实这玩意儿就是个Generator的语法糖,想深入学习得去看看Generator,不然你可能只停留在会用的阶段. 用法很简单,看代码 ...
- ES6中的promise、async、await用法详解
<!DOCTYPE html> <html> <head><title>Promise.async.await</title> </h ...
- async和await的用法
一.async&await用法 async 表示函数里有异步操作, await 表示紧跟在后面的表达式需要等待结果. 同 Generator 函数一样,async 函数返回一个 Promise ...
- vue中异步函数async和await的用法
先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 as ...
- 理解异步函数async和await的用法
定义 async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的执行不会阻塞后面代码的执行:而 await 用于等待一个异步方法执行完成: async/await的作用就是 ...
- async/await用法详解
ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async函数的定义方式 // 函数声明 async function fn() {}// 函数表达式 const fn = a ...
- C#-深入理解async和await的作用及各种适用场景和用法
第十五节:深入理解async和await的作用及各种适用场景和用法 一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调 ...
- C# 中的Async 和 Await 的用法详解
众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...
- 【转载】 C# 中的Async 和 Await 的用法详解
众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...
- 第十五节:深入理解async和await的作用及各种适用场景和用法
一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调用时无须等待返回结果,可以继续往下执行业务 开启新线程:在主线程之外 ...
最新文章
- 【PHPExcel】生成Excel2007文件并下载
- 周炯槃 信息理论基础
- python编码读法-python的读法
- mysql外键约束语句级连_mysql之外键约束(级联操作等) 父表子表
- linux下raid磁盘阵列的命名,linux – mdadm – raid设备名称在重新启动时更改
- 对 makefile 中 $(MAKE) 的学习体会
- 委外订单_听听晚报-英特尔扩大芯片委外订单、苹果秋季或举行两场发布会
- .Net Core + 微信赋能企业级智能客服系统--学习笔记
- java heroku_Heroku和Java –从新手到初学者,第1部分
- Lync和Exchange 2013集成PART4:配置统一存档
- Mac 中 PyCharm 配置 Anaconda环境
- linux搜索文件中包含的字符
- 代码安全审计工具推荐
- 2022危险化学品生产单位安全生产管理人员考试试题模拟考试平台操作
- Java设计模式(思维导图)
- ramda 函数 relation type
- 苹果手机文件夹中服务器连接在哪,如何访问苹果手机上的共享文件夹?
- Movist Pro for Mac 2.2.16 — 播放器
- 微信小程序豆瓣电影学习知识总结
- 芯片常见的三种封装形式