c# - 如何实现 MVC 4 web App 服务器端互斥体

标签 c# asp.net-mvc asp.net-mvc-4 mutex

我不是 MVC 专家,但我相当确定这是可以实现的;但是,我不知道如何在 MVC 4 中执行此操作。

为了进行测试,我使用了您使用 VS 2012 创建网站时提供的默认网络应用程序。

为简单起见,假设 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();
}

关于c# - 如何实现 MVC 4 web App 服务器端互斥体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154306/

相关文章:

c# - 将德语字符(变音符号、重音符号)替换为英语对应字符

c# - 使用嵌套的 if/else 语句查找最多 3 个数字

asp.net-mvc - Azure 虚拟机上的远程调试生产 IIS

jquery - 如何将 int 数组从 jquery ajax 传递到 asp.net mvc 操作

c# - 不允许下拉菜单选择空值

c# - 获取 sql server 中最后插入的以 id 作为主键并且是一个标识的行

c# - 何时使用 JsonResult 而不是 ActionResult

c# - 用C#画一个五线谱

c# - .NET CORE 2 EF 包含

javascript - 在 MVC 中设置选择下拉列表的值时出现问题