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