【发布时间】:2010-03-30 10:33:50
【问题描述】:
我正在使用 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 上,我不知道为什么。是不是有错误,还是应该用其他方法锁定?
谢谢
【问题讨论】:
标签: c# asp.net multithreading methods locking