iis - 异步操作方法对 IIS 有什么影响?

标签 iis async-await asp.net-web-api2

我需要帮助来了解异步操作方法如何提高 IIS(以及最终我的应用程序)的性能。

首先,我尝试使用以下代码和设置 创建服务器不可用(503)

  • 应用队列长度:10
  • IIS - 每个处理器的线程数限制:2
  • 处理器:4

  • enter image description here

    使用 SOAP UI 发送了 20 个请求,当从浏览器尝试时,浏览器显示 503,这正是我所期望的。

    然后我对代码进行了以下更改

    enter image description here

    使用 SOAP UI 再次发送 20 个请求,当从浏览器尝试时,浏览器再次显示 503,这是我没想到的。

    不会 async 和 await 释放线程以接受新连接吗?

    我对以下的理解是否正确
  • 服务器在任何给定时间可以接受的最大并发请求数是:(每个处理器限制的 IIS 线程数 * 处理器数 + 应用程序队列长度)在我的情况下为 18?
  • 在同步操作方法的情况下,第 19 个请求会得到 503?
  • 最佳答案

    定义异步操作方法 不影响 IIS 可以处理多少相同类型的请求 .当您说在 Task.Delay 调用期间释放线程本身时,您是正确的,但请求仍在队列中。

    仅当您向异步 TimeOnServer 操作发送一些请求时,您才会看到不同之处,就像这样,还有一些 其他请求 可以使用更多线程的不同类型 - 例如使用 PLINQ 执行一些并行工作。在这种情况下,您的“其他”请求将以更高的速度提供服务。

    这是一篇古老但非常有用的文章,它清楚地描述了好处:

    Async Programming : Introduction to Async/Await on ASP.NET通过斯蒂芬克利里

    关于iis - 异步操作方法对 IIS 有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100910/

    相关文章:

    angular - 使用对非 ASP .net 应用程序不起作用的 URL 重写从响应中删除服务器 header 。

    javascript - 批量并行 HTTP 请求,每个请求使用异步 for 循环

    c# - 何时使用 TableController<T> 以及何时使用 Custom DomainManager

    attributes - 通过属性版本控制在 Swagger 中利用 MultipleApiVersions

    c# - 为什么 C# 中的 async/await 即使被告知不要返回可空值?

    c# - 使用 JwtAuthForWebAPI 的 Web APi2 身份验证不接受 JWT token

    c# - 从网站获取 IIS 站点 ID

    .net - IIS应用程序池随机崩溃是由堆栈溢出引起的

    IIS 7.5 从响应中删除 etag header

    python - 如何同时处理多个 websocket 消息?