最新要闻
- 世界观焦点:中国生物最新研究!灭活疫苗对新冠康复者同样具有保护效力
- 环球热点评!女子住1楼质问物业为啥要交电梯费 网友力挺
- OPPO Find N2 Flip亮相:副屏太惊艳
- 环球新资讯:日本公布2022年度热门汉字:“战”二次当选 理由奇葩
- 李诞入手小米13和13 Pro:大玩谐音梗
- 每日关注!雷军分享小米13/MIUI 14内置壁纸原图:大批iPhone用户感谢
- 世界观天下!不用耳机也有立体听感!moto X40新增空间音频功能
- 电动自行车新国标充电插头曝光:三脚接口无了 不配套不上电
- 中国汽车工业见证者上新!全新BJ212开售:9.99万起
- 当前观点:顺丰又崩了!小程序查件、寄件都无法操作:范围极大
- Linux发布6.1稳定版:进一步提升国产LoongArch架构CPU支持
- 婆婆给刚出生9天宝宝喂米糊引热议 医生称太离谱:回击这是习俗 科学靠边
- 世界杯决赛用球亮相:取名“梦想”、内藏高科技
- 续航轻松破1000km 哈弗H6插电混动亮相泰国:老外都叹服!
- 环球观热点:马斯克反悔:毫米波雷达重新上车
- 水溶性笔是什么意思?水溶性笔和油性笔的区别是什么?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前播报:对于async和await的使用方式、作用效果不怎么理解 ?没关系,初步看这篇就够了。
结论
同步还是异步,区别如下:
(资料图片仅供参考)
- 同步:你使用await修饰符去调用一个异步(async)方法(是异步方法,不过是阻塞式的,可简单理解为同步);
- 异步:你获取异步方法返回的Task,就是异步(后文有代码示例);
- 可以实现多任务执行顺序执行且不阻塞。
概述
async(C# 参考)
async是“异步”的简写,使用async修饰符可将方法、lambda 表达式或匿名方法指定为异步。
如果对方法或表达式使用此修饰符,则其称为异步方法 。
如下示例定义了一个名为ExampleMethodAsync
的异步方法:
public async TaskExampleMethodAsync(){ //...}
await(C# 参考)
await运算符暂停对其所属的async方法的求值,直到其操作数表示的异步操作完成。
异步操作完成后,await运算符将返回操作的结果(如果有)。
当await运算符应用到表示已完成操作的操作数时,它将立即返回操作的结果,而不会暂停其所属的方法。
await运算符不会阻止计算异步方法的线程。
当await运算符暂停其所属的异步方法时,控件将返回到方法的调用方。
官网说的话是不是听不明白?没关系,你就理解为添加了await修饰符后,必须要等调用返回后才能继续执行下一步。
如下示例:
public async TaskExampleMethodAsync(){ //... //这添加了await,执行到这里需要等待MethodAwiat方法执行完成后才会往下继续执行。 int result = await MethodAwiat(); //...}public async Task MethodAwiat(){ //...}
作用及基本用法
await和async可以简化我们异步编程,也可以让我们以一种类似同步编程的方式来进行异步编程。
另外当我们需要不阻塞主线程异步执行,但又要有顺序的执行相关代码的时候,await/async就可以排上用场。
基本用法如下示例:
////// 可异步可同步 /// ///public async Task TestAsync() { Thread.Sleep(3000); Task task = new Task (() => { return "主程序返回后我还在执行数据:我是复杂的异步执行的方法,不阻碍主程序执行。。。。。"; }); task.Start(); return await task; } // await 使得任务同步 public async void T1() { // 使用 await 关键字,代表等待执行完成,同步 string time = await TestAsync(); Console.WriteLine(time); Console.WriteLine("执行完毕"); } // 直接获得返回的 Task,实现异步 public void T2() { // 获取 Task 任务对象,后面的逻辑过程可以弄成异步 Task task = TestAsync(); // 这里可以处理其它事情,处理完毕后,再获取执行结果 Console.WriteLine("执行完毕"); Console.WriteLine(task.Result); }
实现多任务顺序执行且不阻塞
以微软文档的做早餐的案例加以简化来讲解 【使用Async和Await可以实现多任务顺序执行且不阻塞】。
主线任务任务:倒橙汁 -> 烤面包->煎培根->煎鸡蛋->倒咖啡。
1.同步执行
我们任务逐步顺序执行如下,耗时:17064毫秒(17.064秒):
using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;using System;using System.Diagnostics;using System.Threading;namespace ConsoleApp1{ class Program { static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); PourOJ(); PourCoffee(); ToastBread(); FryBacon(); FryEggs(); Console.WriteLine("早餐已经做完!"); stopwatch.Stop(); Console.WriteLine($"做早餐总计耗时:{stopwatch.ElapsedMilliseconds}"); Console.ReadLine(); } //倒橙汁 private static void PourOJ() { Thread.Sleep(1000); Console.WriteLine("倒一杯橙汁"); } //烤面包 private static void ToastBread() { Console.WriteLine("开始烤面包"); Thread.Sleep(3000); Console.WriteLine("烤面包好了"); } //煎培根 private static void FryBacon() { Console.WriteLine("开始煎培根"); Thread.Sleep(6000); Console.WriteLine("培根煎好了"); } //煎鸡蛋 private static void FryEggs() { Console.WriteLine("开始煎鸡蛋"); Thread.Sleep(6000); Console.WriteLine("鸡蛋好了"); } //倒咖啡 private static void PourCoffee() { Thread.Sleep(1000); Console.WriteLine("倒咖啡"); } }}
2.并行执行
如果此时我们每一项任务都有一个单独的人去完成,将会缩短时间将近3倍(当然不能单纯的用时间量化他),
如下,耗时6041毫秒(6.041秒):
using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;using System;using System.Collections.Generic;using System.Diagnostics;using System.Threading;using System.Threading.Tasks;namespace ConsoleApp1{ class Program { static void Main(string[] args) { Test(); Console.ReadLine(); } private static void Test() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Listtasks = new List () { PourOJ(), ToastBread(), FryBacon(), FryEggs(), PourCoffee() }; Task.WhenAll(tasks).ContinueWith((t) => { Console.WriteLine("早餐已经做完!"); stopwatch.Stop(); Console.WriteLine($"做早餐总计耗时:{stopwatch.ElapsedMilliseconds}"); }); } //倒橙汁 private static async Task PourOJ() { await Task.Delay(1000); Console.WriteLine("倒一杯橙汁"); } //烤面包 private static async Task ToastBread() { Console.WriteLine("开始烤面包"); await Task.Delay(3000); Console.WriteLine("烤面包好了"); } //煎培根 private static async Task FryBacon() { Console.WriteLine("开始煎培根"); await Task.Delay(6000); Console.WriteLine("培根煎好了"); } //煎鸡蛋 private static async Task FryEggs() { Console.WriteLine("开始煎鸡蛋"); await Task.Delay(6000); Console.WriteLine("鸡蛋好了"); } //倒咖啡 private static async Task PourCoffee() { await Task.Delay(1000); Console.WriteLine("倒咖啡"); } }}
3.并行且可指定顺序执行
但是我们不可能每次做早餐都有那么多人同时做,
需求变更:如果现在要求,先倒橙汁,然后倒咖啡,其余的操作并行执行,应该如何操作呢?
只需将以上案例的主线程Test 方法修改如下,其他的不变,耗时8073毫秒(8.073秒):
private static async void Test() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); await PourOJ(); //倒橙汁 await PourCoffee(); //然后倒咖啡 Listtasks = new List () { ToastBread(), FryBacon(), FryEggs() };//子任务List await Task.WhenAll(tasks); //其余的并行操作 Console.WriteLine("早餐已经做完!"); stopwatch.Stop(); Console.WriteLine($"做早餐总计耗时:{stopwatch.ElapsedMilliseconds}"); }
总结
我们发现,用好了async和await确实很节省时间。
大家可以想想怎么优雅的在异步里面开多线程(多主线程多子线程)最节省时间。
参考文献
使用 Async 和 Await 的异步编程(C# )
async(C# 参考)
await(C# 参考)
喜欢就点赞加关注。
欢迎关注订阅微信公众号【熊泽有话说】,更多好玩易学知识等你来取作者:熊泽-学习中的苦与乐公众号:熊泽有话说QQ群:711838388出处:https://www.cnblogs.com/xiongze520/p/16976348.html您可以随意转载、摘录,但请在文章内注明作者和原文链接。
-
当前播报:对于async和await的使用方式、作用效果不怎么理解 ?没关系,初步看这篇就够了。
结论同步还是异步,区别如下:同步:你使用& 160;await& 160;修饰符去调用一个异步(async)方法(是...
来源: 当前播报:对于async和await的使用方式、作用效果不怎么理解 ?没关系,初步看这篇就够了。
记录--记一次前端CSS升级
世界观焦点:中国生物最新研究!灭活疫苗对新冠康复者同样具有保护效力
环球热点评!女子住1楼质问物业为啥要交电梯费 网友力挺
OPPO Find N2 Flip亮相:副屏太惊艳
环球新资讯:日本公布2022年度热门汉字:“战”二次当选 理由奇葩
李诞入手小米13和13 Pro:大玩谐音梗
每日快报!【脚本项目源码】Python制作多功能音乐播放器,打造专属你的音乐播放器
每日关注!雷军分享小米13/MIUI 14内置壁纸原图:大批iPhone用户感谢
世界观天下!不用耳机也有立体听感!moto X40新增空间音频功能
电动自行车新国标充电插头曝光:三脚接口无了 不配套不上电
中国汽车工业见证者上新!全新BJ212开售:9.99万起
当前观点:顺丰又崩了!小程序查件、寄件都无法操作:范围极大
Python工具箱系列(十九)
Linux发布6.1稳定版:进一步提升国产LoongArch架构CPU支持
婆婆给刚出生9天宝宝喂米糊引热议 医生称太离谱:回击这是习俗 科学靠边
世界杯决赛用球亮相:取名“梦想”、内藏高科技
续航轻松破1000km 哈弗H6插电混动亮相泰国:老外都叹服!
环球观热点:马斯克反悔:毫米波雷达重新上车
每日看点!建立自己的kindle书库
国产麒麟系统下基于卫星的NTP网络时间服务器方案
清江浦一行代码 & JNPF :PM2.5全程质控,精准助力建筑业污染防治
全球观热点:sentry 在加载模块时闪退
世界微头条丨零基础开启元宇宙|如何快速创建虚拟形象
Git 的基本使用——笔记
今日视点:Python爬虫实战,requests+openpyxl模块,爬取手机商品信息数据(附源码)
k8s容器内部通过Prometheus Operator部署MySQL Exporter监控k8s集群外部的MySQL
网上打字员赚钱是真的吗?网上打字员是干什么的?
鸿蒙系统3.0支持哪些手机型号?鸿蒙系统3.0怎么升级?
微博借款利息高吗?微博借款利息和借呗哪个高?
余额宝消费红包是什么意思?余额宝消费红包怎么使用?
送男客户什么礼物合适?送男客户礼物前十件排名
电脑光驱是什么东西?电脑找不到光驱驱动器怎么办?
华硕笔记本如何下载驱动?华硕笔记本驱动怎么打开?
空的文件夹占内存吗?空的文件夹为什么删不掉?
DOTA是什么意思?dota和英雄联盟的区别有哪些?
如何提高电脑性能?提高电脑性能的方法有哪些?
环球热头条丨ADB批量截图,且用时间命名
每日信息:行为管理(锐捷智慧教室)
水溶性笔是什么意思?水溶性笔和油性笔的区别是什么?
白炽灯色温是多少?白炽灯色温4000-4600K是多少度?
八字有多少种排列组合?八字有食神代表什么?
荷月是几月的别称?十二个月的别称和雅称
酒店的英语怎么说?酒店前台的工作内容是什么?
全球关注:CAD.NET 批量打印、导出DPF
精选!为解决微信加群或拉人建群的痛点,我用时一个多月写了一个小程序
c++ 如何做出实现一组数据的实际索引
短信+邮箱验证码登录
今亮点!go-dongle 0.2.1 版本发布,一个轻量级、语义化的 golang 编码解码、加密解密库
当前快播:河北用上了无人驾驶农机:北斗加持 坐在屋里就把地给种了
今日要闻!奔驰、宝马、特斯拉相继取消收音机!广播公司担忧:有隐患
换机周期将创历史新高:长达43个月 你多久换一次?
波音、空客狂喜 印度将签史诗级飞机订单:一次买下500架
天天实时:创建全国首个ICU!我国重症医学奠基人陈德昌离世 享年90岁
【当前独家】公司产品太多了,怎么实现一次登录产品互通?
【世界新要闻】2799元配酷睿i5!小米迷你主机将开启众筹 便宜900元条件公布
环球热门:小米13黑色版图赏:直屏直边手感秒杀iPhone 14!
真爱粉!有米粉花近万元抢了两台小米13
世界快资讯:好评率超99% 小米MIX Fold 2推出月光银配色 雷军:镜面效果令人惊叹
天天热点评!比RTX 4090便宜5000 AMD RX 7900系列显卡年底供货20万块:备货充足
小米13系列供不应求!线上已售罄 3999元起
环球即时:差价1000元!一文了解小米13和13 Pro区别
世界观察:NASA猎户座登月飞船成功返回地球:美国完成重返月球第一步
环球观天下!手机“毒瘤”微信终于修复!转发文件多次保存问题解决:不占空间了
天天微头条丨算了吧!电脑RGB光效好看不好玩
59岁李连杰晒照引网友围观 “功夫皇帝”定居国外略显苍老
世界看热讯:Git从入门到实战
Python 基于xml.etree.ElementTree实现XML对比
天天微资讯!飞链云智能机器人-基于ChatGPT的有趣问答
穷人入侵TikTok直播间:躺着就能赚钱 真爽
焦点热讯:为了帮梅西赢球 我敲了一晚上的电子木鱼
环球速递!2022贺岁档总票房突破4亿!《阿凡达2》势不可挡 最快破亿
GPU CPU向量加法时间测试
快播:雷军运气爆棚:在小米手机官方活动 中奖一台小米13
世界资讯:小米音质最好智能音箱!小米Sound Pro开箱图赏
Windows OpenGL 图像透明度调节
焦点热文:异步批处理教程
小米首款万兆路由发布:1799元
天天速递!只要699元!小米旗舰降噪耳机Buds 4发布:HiFi音质
小米8款新品价格汇总:3999元的小米13爱不爱?
全球新资讯:雷军:只有两家做双尺寸双高端 一家是苹果 一家是小米
小米13正式亮相:金属直边 继续对标iPhone!
今亮点!3999元起!小米13正式发布:黄金尺寸小屏、满血徕卡镜头
不涨价 小米13价格良心了:顶配12+512GB还便宜200元
全球微动态丨小米13 Pro正式亮相:中框仅仅3.2毫米!科技纳米皮手感无敌
焦点消息!ELK+FileBeat日志分析系统
快看点丨差错控制
全球信息:Intel显卡驱动即将大更新!DX9、DX11老游戏有惊喜
环球快资讯:MIUI 14“剃刀计划”砍向应用臃肿:微信文件重复存储问题终于解决
全球快看点丨全新界面 系统大幅精简!MIUI 14正式发布
【世界聚看点】使webworker中支持使用import导入模块——threads.js
世界速看:说人话系列:DOM(Document Object Mode)究竟是怎么来的呢?
环球快报:俞敏洪称不敢进高档美发店:一顿好酒肉没有了 心疼
当前热点-达尔文错了?螃蟹竟在地球上出现了5次
全球新资讯:时间轮 (史上最全)
【天天聚看点】雷军晒小米13生产过程 由小米智能工厂全自动化装配
百事通!Intel独立显卡不做了?掌门人一句话 放心了!
长安深蓝SL03宣布涨价:预计上调2000元-8000元
环球快讯:沉船捞出165年前牛仔裤80万卖出:更有数不清的黄金
SpringMVC执行流程