SemaphoreSlim полезен для ограничения числа одновременных обращений к внешнему API, например до четырёх, без блокировки потоков, ожидающих свободное место.
Приведите практический кейс использования `SemaphoreSlim`.
SemaphoreSlim полезен для ограничения числа одновременных обращений к внешнему API, например до четырёх, без блокировки потоков, ожидающих свободное место.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
SemaphoreSlim полезен для ограничения числа одновременных обращений к внешнему API, например до четырёх, без блокировки потоков, ожидающих свободное место.
await gate.WaitAsync(cancellationToken);
try
{
await SendAsync(item, cancellationToken);
}
finally
{
gate.Release();
}
Здесь gate заранее создан как new SemaphoreSlim(4, 4) и общий для всех этих операций. Release находится в finally после успешного WaitAsync: при отмене ожидания нельзя освобождать незахваченный слот. Семафор ограничивает конкурентность, но не число запросов в секунду и не координирует разные процессы.