我在ApiController中定义了这个端点:
public async Task<IHttpActionResult> GetAsync()
{
await Task.Delay(1000);
return Ok("getasync");
}
我正在运行Apache Benchmark来运行50个并发请求,如下所示:
ab -c50 -n50 http://localhost/api/hello/getasync
Requests completed in IIS: 5050ms
Requests completed in IISExpress: 1080ms
似乎在IIS上这些请求不是异步处理的,而是只有10个线程同步地处理请求。
我还通过将WebApi(使用HttpClient)的http请求代理到nodejs端点来测试这一点,该端点在1000ms延迟后响应。我看到类似的结果,代码似乎在IISExpress中运行异步但在IIS中同步运行。
我还在IIS中禁用会话状态,但这没有效果。
两个测试都在Windows 8.1上运行。 IIS版本是8.5。
有人能指出为什么IIS不会异步处理这些请求吗?
答案 0 :(得分:3)
只有10个帖子
实际上,在Windows的非服务器版本上,IIS仅限于10个并发请求。
除此之外,你已经做好了一切,如果你增加并发请求的数量,应该看到几乎任意的吞吐量。