Я разрабатываю веб-приложение для ASP.NET форм с использованием C #. У меня есть метод, который создает новый заказ для клиента. Похоже на это;
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;
}
Проблема здесь в том, что один клиент в двух запросах (потоках) может вызвать двойной вызов этого метода, в то время как другой поток также находится внутри этого метода. Это может привести к созданию двух заказов.
Как правильно заблокировать этот метод, чтобы он мог выполняться только одним потоком за раз для каждого клиента?
Я пытался;
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, и я не знаю почему. Есть ли ошибка, или я должен использовать другой метод для блокировки?
Спасибо