Это мой сценарий: я работаю над системой электронной коммерции (ASP.NET MVC), которой пользователи могут «нравится» продукты.У меня есть метод в моем веб-сервисе (.svc), который, если пользователю уже понравился этот продукт, удаляет подобное, а если нет - добавляет продукт для продукта.
У меня естьПроблема здесь: я вызываю метод «Мне нравится» через Ajax асинхронно, если пользователь нажимает кнопку «Мне нравится» несколько раз непрерывно, поэтому метод вызывается несколько раз непрерывно.так как этот метод не является потокобезопасным, у меня могут быть проблемы здесь.(Например, он может вставлять подобное несколько раз для одного пользователя в базе данных)
Я пытался сделать его поточно-ориентированным с помощью оператора lock
, но, по-видимому, он все еще не 'т работа.Это мой метод веб-сервиса:
private static Object productLikeLock = new Object();
[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public bool ToggleProductLike(int productId)
{
try
{
if (User.Identity.IsAuthenticated)
{
lock (productLikeLock)
{
if (/* User has already liked the product */)
{
// Remove it from the database
return true;
}
else
{
// Add it to the database
return true;
}
}
}
return false;
}
catch (Exception ex)
{
return false;
}
}
Кто-нибудь может мне помочь и сообщить, что не так с моим кодом и подходом?Заранее спасибо