SemaphoreSlim не предотвращает асин c условия гонки - PullRequest
1 голос
/ 09 января 2020

В настоящее время я использую блокировку SemaphoreSlim для предотвращения асинхронного состояния гонки c, однако на производственном сервере я замечаю, что это не предотвращается. Я попытался протестировать локально и не смог воспроизвести проблему (похоже, работает правильно). Я заметил проблему, когда обновил код сервера с синхронного на асинхронный. Из документации, которую я прочитал, должен поддерживаться асинхронный код.

private static SemaphoreSlim m_AssignUniqueBookingKey = new SemaphoreSlim(initialCount: 1, maxCount: 1);
public async Task CreateForInstance(visitP)
{
  string unique_booking_key = null;
  await m_AssignUniqueBookingKey.WaitAsync();
  try
  {
   unique_booking_key = await UniqueBookingKeyCommand.UpdateForVisit(visitP.ID);
  }
 finally
 {
  m_AssignUniqueBookingKey.Release();
 }
...