Назад к вопросам
Senior
5
Как синхронизировать доступ к ресурсу в асинхронном коде (не более одного запроса одновременно)?
Компании, где спрашивали
Сбербанк
Ответ от нейросети
sobes.tech AI
Для синхронизации доступа к ресурсу в асинхронном коде C# и обеспечения, что одновременно выполняется не более одного запроса, можно использовать класс SemaphoreSlim.
Пример:
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
public async Task UseResourceAsync()
{
await _semaphore.WaitAsync();
try
{
// Работа с ресурсом
await SomeAsyncOperation();
}
finally
{
_semaphore.Release();
}
}
Здесь SemaphoreSlim с максимальным счетчиком 1 действует как асинхронный мьютекс, позволяя только одному вызову одновременно войти в критическую секцию. Остальные вызовы будут ожидать освобождения семафора без блокировки потока.