如何设置MS Kestrel Web Server来处理请求异步并处理多个请求而不会阻塞

时间:2017-05-23 21:05:43

标签: c# asp.net asp.net-web-api asp.net-web-api2 kestrel-http-server

我正在使用MVC和WebApi以及Kestrel Web Server测试ASP.NET核心Web应用程序。

   var host = new WebHostBuilder()
      .UseKestrel(opt => opt.ThreadCount = 10)
      .UseConfiguration(config)
      .UseContentRoot(path)
      .UseStartup<Startup>()
      .Build();

由于某种原因,当服务器处理请求时,它不会接受任何新请求。从我所看到的情况来看,情况应该不是这样,但我无法弄清楚我做错了什么。

这是我的WebApi控制器代码:

[HttpPost]
[Route("/api/test/{moduleid}")]
public Task<object> Api(string moduleId, [FromBody] JObject data)
{
    return Task.Run( () =>
    {
        return domain.Handle(moduleId, data);
    });
}

代码不是Async所以我在Task.Run调用中包装。一切正常,但服务器阻止新请求,直到当前请求完成。

1 个答案:

答案 0 :(得分:1)

Kestrel在设计上是异步的。我使用的客户端一次只能限制一个请求(Postman)。一旦我使用了多个客户端,我看到一切都很顺利。