У меня есть метод, который ищет объект в базе данных и пытается создать его, если он не существует.Например:
public async Country FindOrCreate(string name)
{
var country = _context.Countries.FirstOrDefault(p => p.Name == name);
if (country != null)
return country;
country = new Country
{
Name = name
};
_context.Countries.Add(country);
_context.SaveChanges();
return country;
}
Проблема в том, что в фоновом режиме есть несколько задач, вызывающих FindOrCreate
одновременно.Я предотвратил вставку дубликатов, создав уникальный индекс, но происходит следующее, вызывая нежелательные исключения:
- Задача A пытается найти страну и не удается
- Задача B пытается найтиСтрана и не удается
- Задача A пытается создать страну и успешно
- Задача B пытается создать страну и не удается
Каков будет подходящий способ обработки этих сценариевпараллелизма?Должен ли я работать с замками с использованием кода C #?Или я должен установить транзакцию?ТИА