Карточка Middle GCD и OperationQueue обновлено
DispatchSemaphore для ограничения параллельности
Вопрос
Как с помощью семафора ограничить загрузку тремя одновременными запросами?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
let sem = DispatchSemaphore(value: 3); перед запуском запроса sem.wait() на фоновой очереди, в completion sem.signal().
Ответ
let sem = DispatchSemaphore(value: 3); перед запуском запроса sem.wait() на фоновой очереди, в completion sem.signal().
Разбор
wait() нельзя вызывать на главном потоке и в async-коде. Удобнее OperationQueue с maxConcurrentOperationCount = 3 или группа задач.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «GCD и OperationQueue»
- Асинхронная Operation
- Барьер для потокобезопасного кеша
- Как дождаться нескольких запросов в GCD
- Задача на Swift: операции с зависимостями и критический путь
- Задача на Swift: OperationQueue с ограничением параллельности
- DispatchQueue.main.sync на главном потоке
- Инструменты GCD и их задачи
- Синхронный доступ к состоянию без очереди