Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : gcd, dispatchworkitem, cancel

Как отменить задачу, отправленную в GCD-очередь?

Вопрос проверяет умение контролировать исполнение асинхронных задач в Grand Central Dispatch и отменять их при необходимости.

Короткий ответ

GCD по умолчанию не поддерживает отмену обычных async задач, но можно использовать DispatchWorkItem — он позволяет вызвать метод cancel(), а в самом блоке проверять isCancelled и досрочно выходить.

Длинный ответ

Создание DispatchWorkItem:

let workItem = DispatchWorkItem {
    	for i in 0..<100 {
        	guard !workItem.isCancelled else { return }
        	// тяжёлая работа
    	}
}
DispatchQueue.global().async(execute: workItem)

Отмена:

workItem.cancel()

Проверка внутри блока:

  • isCancelled будет true, если вызван cancel().

  • Нужно периодически проверять, чтобы избежать лишней работы.

Ограничения:

  • Если блок уже начал выполняться и не проверяет isCancelled, его не остановить.

  • Нет гарантий мгновенной отмены.

Вывод:
Для контролируемой отмены задач в GCD используйте DispatchWorkItem и проверку isCancelled внутри блока. Это даёт гибкость управления, но требует явной поддержки внутри кода.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Swift

    Swift

Ключевые слова

#gcd

#dispatchworkitem

#cancel

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.