标签:style blog http color io os java ar strong
我们来看两个ajax方法,先后的问题,会有什么样的结果?
Javascript:
$(function () { //第一个 $.ajax({ type: "POST", url: "/Home/Method1", success: function (msg) { $(‘#m1‘).html(‘第一个方法完成‘); } }); //第二个 $.ajax({ type: "POST", url: "/Home/Method2", success: function (msg) { $(‘#m2‘).html(‘第二个方法完成‘); } }); });
服务端
public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { Session["test"] = 123; return View(); } public ActionResult Method1() { Thread.Sleep(6000); return Json(""); } public ActionResult Method2() { return Json(""); } }
本以为:两个ajax是异步请求,谁先处理完,就谁先返回回来。
可是现实却大大出乎我的意料。见下图。
明显第二个请求是等第一个请求处理完了,才执行的。
其实问题是出现在Session上,那么我们把Session["test"] 去掉,这样再看结果:
原来妖孽就是Session,同一会话,即请求的SessionId是相同的,都会初始化Session对象,并锁住Session对象;其他同一会话的请求要用到Session对象,只能等待。因此才会出现前面的情况。
只需要标识当前会话session行为为只读行为,就不会加锁
[SessionState(SessionStateBehavior.ReadOnly)]
[SessionState(SessionStateBehavior.ReadOnly)] public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { Session["test"] = 123; return View(); } public ActionResult Method1() { Thread.Sleep(6000); return Json(""); } public ActionResult Method2() { return Json(""); } }
结果符合表述,如下图:
标签:style blog http color io os java ar strong
原文地址:http://www.cnblogs.com/cainiaoguoshi/p/3976100.html