日期:2014-05-17  浏览次数:20413 次

[MVC] 在action中执行Thread.Sleep会导致后续请求阻塞
假设我有一个如下的Action,用浏览器访问一次以后,输出ok然后挂起10秒,但是如果同时再访问一次,就必须等之前的请求处理完毕以后才会进入Action,也就是第二次访问要等10秒后才会输出ok,这是怎么回事?
但是如果开另外一个浏览器就不会有这样的问题

public class TestController : Controller 
    {
        public void Index()
        {
            Console.WriteLine("ok");
            Thread.Sleep(10000); 
        }
    }

------解决方案--------------------
引用:
对了另外还有一个很重要的情况,那就是如果我开另外一个浏览器去访问就不会被阻塞,比如一开始我用chrome然后再用firefox就没问题!我查过有说是session被加锁的缘故,但是我禁止掉session后还是不行

这个很明显的,同一个会话会被阻塞的,不同会话不会。
同一款浏览器会保持会话的,开另一款浏览器就是一个新的会话了,所以不会阻塞。