我做了一个简单的 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 articlethis article获取更多信息。

更新

由于您使用的是 ApiController,因此上述行为可能不适用。但是,浏览器将进一步限制并发,如 this post 的答案中所述。 .


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!