Sobes.tech
Senior

Jak synchronizować dostęp do zasobu w kodzie asynchronicznym (nie więcej niż jedno żądanie naraz)?

sobes.tech AI

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