C#을 사용하여 ASP.NET 양식 웹 응용 프로그램을 개발하고 있습니다. 나는 고객을위한 새로운 주문을 만드는 방법을 가지고있다. 이것과 비슷하게 보입니다.ASP.NET 잠금 스레드 방법
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에 멈춰서 그 이유를 알 수 없습니다. 오류가 있습니까, 아니면 다른 방법으로 잠 가야합니까?
감사
실제로 try/finally를 추가하지 않으므로 실수입니다. 그러나 불행하게도 그것은 문제의 해결책이 아닙니다. – Peter