Sobes.tech
Senior

Como sincronizar o acesso a um recurso em código assíncrono (não mais do que uma requisição de cada vez)?

sobes.tech IA

Resposta da IA

Для синхронизации доступа к ресурсу в асинхронном коде 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 действует как асинхронный мьютекс, позволяя только одному вызову одновременно войти в критическую секцию. Остальные вызовы будут ожидать освобождения семафора без блокировки потока.