В настоящее время я использую блокировку 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();
}