Обработка одинаковых одновременных реквестов

Есть метод в контроллере апи, этот метод принимает модель сущности. Внутри проверяется, существует ли такая сущность и если нет, то мы ее создаем. Если сущность уже есть, то мы ничего не делаем.

Возникла проблема при куче параллельных одинаковых запросов к этому апи, т.е. с одной и той же сущностью. Если запросы идут совсем рядом, то для них обоих сущность не существует и создается в обоих случаях, хотя нам нужно только 1 создание.

Вопрос: как правильно избежать таких ситуаций? Сейчас у нас несколько таких методов с похожим поведением в приведенном кейсе.

UPD: сущности создаются в Mongo, но я не вижу возможности делать проверку ее средствами. Речь идет не о простой проверке уникальных полей в коллекции. Связи сложнее. Да, просто с полем Name может помочь Unique Constraints on Arbitrary Fields, но что делать, если уникальной должна быть комбинация полей, к примеру Name + Type? Или вообще по неполному совпадению одного из филдов и полному другого?

В общем, интересует возможность делать проверку именно из кода.

[HttpPost("entity")]
public async Task<EntityView> CreateEntity(
    [FromBody] EntityModel payload)
{
    var existedEntity = await GetEntityByName(payload.Name);
    if (existedEntity != null)
    {
        return existedEntity.ToView();
    }

    var result = await CreateEntity(payload);
    return result.ToView();
}

Ответы (0 шт):