我正在使用 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 个客户可能会导致该方法被调用两次,而另一个线程也在该方法内。这可能会导致创建两个订单。
如何正确锁定此方法,以便每个客户一次只能由一个线程执行?
I tried;
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 上,我不知道为什么。是否有错误,或者我应该使用其他方法来锁定?
Thanks
Pass false
for initiallyOwned
in the mutex
演员。如果您创建互斥体并最初拥有它,则需要调用ReleaseMutex
again.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)