Sobes.tech
Senior

Hogyan szinkronizáljuk a hozzáférést egy erőforráshoz aszinkron kódban (legfeljebb egy kérés egyszerre)?

sobes.tech MI

Válasz az MI-től

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