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