【问题标题】:WebApi async vs syncWebApi 异步与同步
【发布时间】:2018-10-23 15:30:48
【问题描述】:

我是 .Net WebApi 的新手,因为我知道最好使用异步 API 而不是同步 API,但有什么区别? 如果 API 是同步的并且是从客户端调用的,而另一个客户端的另一个调用,正如我检查的那样,不会发生中断,并且两个调用将同时进行。那么,让它异步有什么好处呢?

更新:据我了解,如果请求数量很大,如果我使用异步,一些调用的等待时间会更少,因为有更多线程可用于运行任务(因为其中一些被释放等待数据库调用,或网络调用等)是真的吗?

【问题讨论】:

  • 这里的异步/同步不是关于响应其他客户端,而是关于不阻塞服务器资源同时等待其他事情发生。通常,服务器正在等待例如数据库、其他网络调用、文件系统等
  • 如果你“一直向下”异步,那么there is no thread
  • 我知道由于重复或离题的原因必须关闭它,但我找不到任何!
  • @TheGeneral - 我在犹豫是否在“相关”部分使用this one

标签: c# asp.net-web-api


【解决方案1】:

在 SYNC 的情况下,发生的情况是,对于每个请求,一个线程被排他地分配,并且该线程仅在完成特定请求时才被释放。 而在 ASYNC 的情况下,线程可能会被其他请求重用。

因此,如果您的应用程序受 I/O 限制,那么您可以通过使用 ASYNC 看到应用程序的显着改进,如果您的应用程序受 CPU 限制,那么 ASYNC 将没有太大用处。

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

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

【讨论】:

    【解决方案2】:

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

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

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

    我希望你在这一点上得到你的答案,为什么它是有益的。想象这样一种情况,您的 API 服务于 1000 名篮球支付者的列表及其详细信息,同时请求进入城市列表。我敢打赌,如果您在提供播放器列表时得到一些东西,您的客户端应用程序会看起来更整洁,不是吗?

    其次,API 不喜欢 Aync。它是您的编程选择。如果您利用完整的语言和操作系统功能,那么您的应用程序和用户将从中受益。

    缓存,

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

    【讨论】:

    • 所有这些实际上都是正确的,我认为这有点忽略了问题的重点,即 Web 服务的异步等待模式
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2010-10-24
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多