我做了一个简单的 GET,循环 10 次,每次迭代等待 1 秒来模拟工作。当我从 Chrome 中的一个选项卡调用此路由时,需要 10 秒(如预期)。当我同时调用此路由(从 2 个不同的选项卡)时,第一个选项卡需要 10 秒才能完成,但第二个选项卡需要 20 秒。
如果我将我的第二个选项卡设置为隐身选项卡,则两个请求在同时运行时会在 10 秒内返回。我还注意到,如果我有 2 个不同的 Controller (和 2 个不同的路由),来自 2 个非隐身选项卡的同时请求会同时返回。
谁能解释为什么同步处理对同一个 Controller 的多个请求?
编辑:该站点目前在 IIS 中自行托管
请您参考如下方法:
ASP.NET 使用 session 状态锁定来确保在给定时间同一 session 中只处理一个请求。这有助于防止围绕 session 状态的竞争条件。
使用 SessionStateAttribute
可以获得更好的并发性告诉 ASP.NET 您不打算写入 session 状态。
参见 this article或 this article获取更多信息。
更新
由于您使用的是 ApiController
,因此上述行为可能不适用。但是,浏览器将进一步限制并发,如 this post 的答案中所述。 .