Sobes.tech
Senior

Kako sinhronizovati pristup resursu u asinhronom kodu (ne više od jednog zahteva odjednom)?

sobes.tech АИ

Одговор од АИ

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