Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 异步MVC4操作似乎会阻止同时接收的多个请求_Multithreading_Asp.net Mvc 4 - Fatal编程技术网

Multithreading 异步MVC4操作似乎会阻止同时接收的多个请求

Multithreading 异步MVC4操作似乎会阻止同时接收的多个请求,multithreading,asp.net-mvc-4,Multithreading,Asp.net Mvc 4,我正在尝试使我的MVC控制器操作在.NET4.0下异步运行。然而,我的任何尝试都没有给我想要的结果。我有以下行动: public ActionResult ImportXml() { try { if (_importRunning) return Content("Already running"); var obj = new object();

我正在尝试使我的MVC控制器操作在.NET4.0下异步运行。然而,我的任何尝试都没有给我想要的结果。我有以下行动:

public ActionResult ImportXml()
    {
        try
        {
            if (_importRunning)
                return Content("Already running");

            var obj = new object();
            lock (obj)
            {
                _importRunning = true;
                Thread.Sleep(20000);
                //_employesImportService.ImportXml();
                _importRunning = false;
            }

            return Content("Done");
        }
        catch (Exception e)
        {
            return Content(e.Message);
        }
    }

当我同时运行两个调用此操作的浏览器时,两个浏览器似乎都在等待我在Thread.Sleep(20000)中设置的20秒。我认为使用锁机制会阻止一个请求并立即返回“已经运行”的内容。我使用的是.NET4.0,我没有使用AsyncAwait的选项。但是有没有其他方法可以实现这一点,以便其中一个请求能够快速响应?

您的
没有意义。您可能需要禁用会话状态。我现在明白了为什么锁没有意义,但当我尝试禁用会话状态时,两个请求仍然需要20秒才能响应。显然我没有得到什么。在第二个请求等待时暂停调试器,看看它的线程在做什么。我试图使用Visual Studio中的“线程”窗格了解第二个线程在做什么,但似乎无法理解。不管怎样,第二个线程也会等待。我尝试设置一个静态对象,我尝试了Monitor.TryEnter等,但没有成功。第二个线程不会立即响应消息“已在运行”。