Карточка Middle GCD и OperationQueue обновлено
DispatchWorkItem и отмена
Вопрос
Как отменить запланированный блок GCD, например поиск по таймеру?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Обернуть в DispatchWorkItem, запланировать через asyncAfter(deadline:execute:), при новом вводе вызвать item.cancel() и создать новый.
Ответ
Обернуть в DispatchWorkItem, запланировать через asyncAfter(deadline:execute:), при новом вводе вызвать item.cancel() и создать новый.
Разбор
Отмена не прерывает уже начатый блок: он должен сам проверять item.isCancelled. Это ручной debounce.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
DispatchSemaphore для ограничения параллельности
Следующий вопрос
Как дождаться нескольких запросов в GCD
Термины по теме
Ещё по теме «GCD и OperationQueue»
- Асинхронная Operation
- Барьер для потокобезопасного кеша
- Инверсия приоритетов
- Задача на Swift: операции с зависимостями и критический путь
- Задача на Swift: OperationQueue с ограничением параллельности
- DispatchQueue.main.sync на главном потоке
- Инструменты GCD и их задачи
- Синхронный доступ к состоянию без очереди