如何实现 MVC 4 Web 应用服务器端互斥锁



我不是MVC专家,但我相当确定这是可以实现的;但是,我不知道如何在MVC 4中做到这一点。

为了进行测试,我使用的是使用 VS 2012 创建站点时给出的默认 Web 应用程序。

为简单起见,请考虑 HomeController.Index() 由多个用户同时点击(例如 3)。我想执行一个互斥的方法,以便一次只有一个执行;因此连续强迫它们。我不在乎什么顺序。我知道有关阻止页面的警告,并且所有内容都应该是异步的,但是为此我需要阻止很短的时间。

public class HomeController : Controller {
    private String dosomething() {
        String str;
        str = "SomeValue"; //<-- Will vary
        return str;
    }
    public ActionResult Index() {
        String str;
        // How do I do implement the following, preferably with a timeout to be safe
        Lock(dosomething);
            str = dosomething();
        unLock(dosomething);
        return View();
    }

如果要将执行限制为一次执行一个,则需要一个静态锁定对象:

public class HomeController : Controller {
    private static object _lockobject = new object();

然后:

public ActionResult Index() {
    String str;
    lock (_lockobject)
    {
        str = dosomething();
    }
    return View();
}

如果您需要超时,则可以使用 Monitor.TryEnter 而不是 lock

public ActionResult Index() {
    String str;
    if (Monitor.TryEnter(_lockobject, TimeSpan.FromSeconds(5)))
    {
        str = dosomething();
        Monitor.Exit(_lockobject);
    }
    else str = "Took too long!";
    return View();
}

最新更新