编程语言
首页 > 编程语言> > C#-ASP.NET锁定线程方法

C#-ASP.NET锁定线程方法

作者:互联网

我正在使用C#开发ASP.NET表单Web应用程序.我有一种为客户创建新订单的方法.看起来与此类似;

    private string CreateOrder(string userName) {
        // Fetch current order
        Order order = FetchOrder(userName);
        if (order.OrderId == 0) {
            // Has no order yet, create a new one
            order.OrderNumber = Utility.GenerateOrderNumber();
            order.Save();
        }
        return order;
    }

这里的问题是,两个请求(线程)中的1个客户有可能导致两次调用此方法,而另一个线程也在此方法内.这可能导致创建两个订单.

如何正确锁定此方法,以便每个客户一次只能由一个线程执行该方法?

我试过了;

    Mutex mutex = null;
    private string CreateOrder(string userName) {
        if (mutex == null) {
            mutex = new Mutex(true, userName);
        }
        mutex.WaitOne();
        // Code from above
        mutex.ReleaseMutex();
        mutex = null;
        return order;
    }

这可行,但是在某些情况下它挂在WaitOne上,我不知道为什么.是否有错误,还是应该使用其他方法锁定?

谢谢

解决方法:

为互斥锁中的initialOwned传递false.如果创建互斥锁并最初拥有它,则需要再次调用ReleaseMutex.

标签:multithreading,locking,asp-net,c,methods
来源: https://codeday.me/bug/20191210/2099693.html