Je développe une application Web de formulaires ASP.NET à l'aide de C#. J'ai une méthode qui crée une nouvelle commande pour un client. Cela ressemble à ceci;Méthode de thread de verrouillage 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;
}
Le problème est ici, il est possible que 1 client dans deux requêtes (threads) pourrait provoquer cette méthode à appeler deux fois, tandis qu'un autre fil est également à l'intérieur de cette méthode. Cela peut entraîner la création de deux commandes.
Comment puis-je verrouiller correctement cette méthode, afin qu'elle ne puisse être exécutée que par un thread à la fois par client?
J'ai essayé;
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;
}
Cela fonctionne, mais dans certains cas, il se bloque sur WaitOne et je ne sais pas pourquoi. Y at-il une erreur, ou devrais-je utiliser une autre méthode pour verrouiller?
Merci
Merci, c'est en effet une erreur de ne pas ajouter l'essai/enfin. Mais malheureusement, ce n'est pas la solution au problème. – Peter