1

我正在使用 ASP.NET MVC 和 IIS 7.5 版。

我在控制器中有以下操作。

public ActionResult Wait(int time = 10000)
{
    var start = DateTime.Now;

    Thread.Sleep(time);

    var end = DateTime.Now;

    var diff = (end - start);

    return Json(new {
        start = start.ToString("yyyy-MM-dd HH:mm:ss.fff"),
        end = end.ToString("yyyy-MM-dd HH:mm:ss.fff"),
        milliseconds = diff.TotalMilliseconds.ToString("#,###"),
    }, JsonRequestBehavior.AllowGet);
}

如果我访问:/wait?time=10000

然后:/wait?time=10

在第一个请求完成之前,第二个请求甚至不会执行。

这是正常行为,还是每个请求都应该在自己的线程中执行?

将这一点放在上下文中,在我们的应用程序中,不同的调用可能需要从不同的服务器询问数据,我不想在执行几个更简单的请求(仅需要本地数据)之前等待一个复杂的请求完成。

编辑

我刚刚意识到我在谈论来自同一个用户的请求(在同一个会话中)。我想我只是昏暗,但也许有人仍然可以提供帮助。

4

1 回答 1

1

来自MSDN

并发请求和会话状态

每个会话对 ASP.NET 会话状态的访问是独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。但是,如果对同一个会话发出两个并发请求(通过使用相同的 SessionID 值),则第一个请求将获得对会话信息的独占访问权。第二个请求仅在第一个请求完成后执行。(如果因为第一个请求超过了锁超时,信息上的独占锁被释放,第二个会话也可以获得访问权。)如果@Page指令中的EnableSessionState值设置为ReadOnly,则请求只读会话信息不会导致对会话数据的独占锁定。然而,

于 2013-02-19T18:34:45.230 回答