Multithreading 异步MVC4操作似乎会阻止同时接收的多个请求
我正在尝试使我的MVC控制器操作在.NET4.0下异步运行。然而,我的任何尝试都没有给我想要的结果。我有以下行动: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();
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等,但没有成功。第二个线程不会立即响应消息“已在运行”。