本文章是我听B站杨中科的所做的笔记
杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili
生活的例子:
同步点餐:一个服务员来记菜
异步点餐:服务员给菜单客户点餐
异步点餐不会提升单个客户点餐的速度
web服务器能够同时服务的请求数量有限
async、await不等于“多线程”
异步原理
对于不支持的异步方法怎么办?wait()(无返回值);Result(有返回值)。风险:死锁。尽管不用
await、async是语法糖,最终编译成“状态机调用”
async的方法会被C#编译器编译成一个类,会主要根据await调用进行切分为多个状态,对async方法的调用会被拆分为对MoveNext的调用
用await看似是“等待”,经过编译后,其实没有“wait”
async背后线程切换
为什么要把一个async方法拆分为多个状态然后分为多次调用?异步的可以避免线程等待耗时操作,但是await还是等待呀?
await调用的等待期间,.net会把当前的线程返回给线程池,等异步方法调用执行完毕后,框架会从线程池再取出来一个线程执行后续的代码