.NETCore——异步

本文是关于.NETCore异步编程的笔记,讲解了异步原理、async/await的线程切换、Task.Run()的使用、CancellationToken在异步操作中的作用以及异步方法的优化。强调了异步方法不等于多线程,使用await Task.Delay()代替Thread.Sleep()避免阻塞,并探讨了异步编程在提升系统吞吐量上的价值。
摘要由CSDN通过智能技术生成

本文章是我听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会把当前的线程返回给线程池,等异步方法调用执行完毕后,框架会从线程池再取出来一个线程执行后续的代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值