Я использую .net core EF и хочу убедиться, что одновременно только один поток выполняет определенный блок кода, который имеет логику обновления данных в базу данных:
public async Task<IActionResult> ApproveEntity([FromBody] Entity[] entities)
{
Entity Entity = entities.Where(f => f.isMainEntity == true).First();
try
{
try
{
try
{
if (this.ValidateConcurrencyForWriteBack(Entity))
{
return this.BadRequest("Concurrency Error : Somebody else has already done this action. Please refresh and try again.");
}
else
{
try
{
if (Entity.SupportingDocuments?.Count > 0)
{
await this.UploadDocumentsToBlob(Entity, user);
this.Uow.Commit();
}
}
catch (Exception ex)
{
throw;
}
await this.BulkChallengeApproveReject(entities, user);
}
}
}
catch (DbUpdateConcurrencyException ex)
{
}
}
catch (Exception ex)
{
}
return this.Ok(Entity);
}
Я хочу выше блокакода должен выполняться одним потоком за раз.
Я пытался использовать Mutext & SemaphoreSlim , но не получил ожидаемый результат.
Метод validateConcurrency проверит, обновлена ли запись уже или нет.но это не предотвращает блокировку потоков.