Mam następujące metody dodawania lub aktualizowania obiektu typu Item
dla niektórych użytkowników. Ta metoda jest częścią klasy serwisowej, której nowe wystąpienie jest tworzone dla każdego żądania.ASP.NET Web API - logika wątku w celu aktualizacji jednostki
public async Task SaveItem(int userId, string name)
{
var item = await _context.Items.Where(i => i.UserId == userId).SingleOrDefaultAsync();
if (item == null)
{
item = new Item
{
UserId = userId,
Name = name
};
_context.Items.Add(item);
}
else
{
item.Name = name;
_context.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
await _context.SaveChangesAsync();
}
Problem polega na tym, że dwie jednoczesne żądania mogą utworzyć dwie pozycje dla tego samego użytkownika, które nie są prawidłowe. Wydaje mi się, że jest to całkiem popularny kod i zastanawiam się, jaki jest domyślny sposób radzenia sobie z tego rodzaju problemem współbieżności.
Dzięki, to było pomocne łącze. Zakończyłem wdrażanie optymalnej obsługi za pomocą try/catch. –
Tak, bardzo dobrze. Chciałbym Ci pomóc :) – Sampath