WebApi异步与同步

6
我刚接触 .Net WebApi,据我所知,与同步 API 相比,使用异步 API 更为可取,但它们有什么区别呢? 如果该 API 是同步的,并且已从客户端调用,并且另一个客户端发起了另一个调用,则根据我的检查,不会发生任何中断,两个调用都将同时进行。那么,使其异步的好处是什么?
更新:据我理解,如果请求数量很大,如果我使用异步,则某些调用的等待时间将减少,因为有更多线程可用于运行任务(因为某些线程在等待数据库调用或网络调用等)。这是真的吗?

3
这里的async/sync并不是指响应其他客户端,而是指在等待其他操作完成时不阻塞服务器资源。通常情况下,服务器会等待数据库、其他网络调用、文件系统等操作。 - Damien_The_Unbeliever
1
如果你完全采用异步方式,那么就没有线程了。参考链接 - Damien_The_Unbeliever
1
我知道这个问题可能因为重复或离题而需要关闭,但我找不到任何原因! - TheGeneral
1
@TheGeneral - 我一直在犹豫是否要使用“相关”部分中已经提到的这个 - Damien_The_Unbeliever
显示剩余7条评论
2个回答

10
在同步情况下,每个请求都会分配一个专用线程,并且该线程仅在特定请求完成后才被释放。而在异步情况下,线程可以被其他请求重复使用。
因此,如果您的应用程序是I/O绑定的,则使用异步可能会显着改善您的应用程序;如果您的应用程序是CPU绑定的,则异步将不那么有用。

https://en.wikipedia.org/wiki/I/O_bound

https://en.wikipedia.org/wiki/CPU-bound


0

首先重申同步和异步之间的区别。

{------------- 同步任务1 -------------}{-------------- 同步任务2 ------------}

{---------------------- 异步任务1 --------------------}
{---------------------- 异步任务2 --------------------}

我希望到这个点上你已经明白为什么它是有益的了。想象一下这样的情况,当请求城市列表时,你的API正在提供1000名篮球运动员及其详细信息的列表。如果在球员列表被服务时你能得到一些东西,那么你的客户端应用程序肯定会更整洁,不是吗?

其次,API并不特别偏爱异步。这是你的编程选择。如果你充分利用语言和操作系统的功能,你的应用程序和用户将从中获益。

缓存,

使用异步确实有助于缓存,如果你使用新的内存缓存或自定义服务器级缓存。毕竟,你的客户端正在寻找304返回,而在长时间请求被服务时可以处理小请求,即缓存检查。


所有这些都是事实正确的,我认为这有点偏离了问题的重点,即Web服务的异步等待模式。 - TheGeneral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接