为什么用await而不直接使用同步调用呢?

来源:3-2 【理论】什么是面向对象

2227181

2023-10-18

老师,async + await方便了调用异步动作来实现同步一样的顺序执行。我有个疑问,为什么不直接用同步调用,反而要用async + await呢?
把任务交给后台的异步任务调度会更有效率?还是什么其它的原因?

写回答

1回答

阿莱克斯刘

2024-01-17

web应用本身就是多线程模式,服务器会为每个请求分配工作线程。比如,有1000个人同一时间访问网站,这个情况就需要网站具有能够处理并发操作的能力。

在 web 服务器上,.NET 会维护一个专门用来用于处理请求的线程池。当请求到达时,将调度池中的线程以处理该请求。如果以同步方式处理请求,则处理请求的线程将在处理请求时处于繁忙状态,并且该线程无法处理其他请求。

在启动时看到大量并发请求的 web 应用中,或具有突发负载(其中并发增长突然增加)时,使 web 服务调用异步会提高应用程序的响应能力。异步请求与同步请求所需的处理时间相同。 如果请求发出需要两秒钟时间才能完成的 web 服务调用,则该请求将需要两秒钟,无论是同步执行还是异步执行。但是,在异步调用期间,线程在等待第一个请求完成时不会被阻止响应其他请求。因此,当有多个并发请求调用长时间运行的操作时,异步请求会阻止请求队列和线程池的增长。

所以async + await更多的效果会体现在并发处理上,分别使用async和不用async两种方式跑一下压力测试,你就会看到区别了。

0
0

C#速成指南--从入门到进阶,实战WPF与Unity3D开发

系统掌握C#核心和应用,获得全行业适配的技能

839 学习 · 198 问题

查看课程