Intern Day20 - C#异步编程 - async和await
async和await介绍
async和await是 C# 的语法糖,作用:用来处理异步编程(用来简化异步编程模型)。
参考视频,戳这里
同步概念
概念:多个方法顺序执行,后一个会等待前一个执行完成后,才开始执行。
异步概念
概念:调用一个方法 A ,调用后会立即返回(不用等方法 A 执行完成),接着调用后面的方法 B。比如:电脑是A,喝水是B,我在电脑开机的时候可以去喝水,不用等电脑开完机再去喝。
一般我们需要异步的地方都是在进行比较耗时的操作,比如说磁盘IO、网络IO,当以同步的方式调用系统API进行磁盘读取或者获取网络数据的时候,线程会阻塞在那里等待什么事也干不了,直到操作系统从底层返回IO数据。异步模式就是在执行耗时IO API的时候线程不等待结果而是直接返回并注册一个回调函数,当操作系统完成耗时操作的时候,调用回调函数通知你IO结果。
异步解决的问题
-
在 Winform 等富客户端程序中可以让 UI 线程避免阻塞
-
高效处理 IO 密集型任务和 CPU 密集型任务
-
处理执行时间比较长的操作(比如:文件转换等)
实现异步的方式
-
.NET 2.0用BeginInvoke、EndInvoke和回调的方式实现
-
将一些耗时的操作写成同步的方法,然后起一个新的线程或Task进行调用
-
使用 async 和 await 的异步编程模型
-
使用消息队列
async和await用法
class Program
{
static void Main(string[] args)
{
Console.WriteLine("start");
TestAsync();
Console.WriteLine("end");
Console.ReadLine();
}
static async void TestAsync() // 方法添加async标识符
{
await Task.Delay(3000);
Console.WriteLine("***");
}
}
输出:
start
end
***
async标识符
-
async只是表明这个方法中可能有异步调用,并不能表示这个方法就是异步方法
-
async是一个专门给编译器的提示,说明该函数的实现可能会出现await
-
async唯一的用处:给await提供上下文,做向下兼容的
-
如果函数被标记为async,函数体内部的await才会被解释成关键字,而不会当成是一个函数,所以说当方法中有使用await关键字调用异步方法,所在的方法必须使用async
-
async不是函数声明的一部分,仅仅是一个标识符,从调用者的角度来看,不存在async
-
在方法的内部使用await关键字,只要是返回Task对象的方法就可以使用await,如果没有await,那么有async标识符的方法就相当于是一个同步方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-03-09 寒假Day46:POJ2155-Matrix-二维树状数组
2020-03-09 寒假Day46:CodeForces1321C-Remove Adjacent-字符串+思维
2020-03-09 寒假Day46:MySQL安装和环境配置 for Mac