26. Что умеет OperationQueue такого, чего нет у GCD?Теория

Дополнительные вопросы

1. Как в OperationQueue ограничить число одновременных операций?

2. Как дождаться окончания нескольких параллельных задач в GCD и в OperationQueue?

3. Что произойдёт с уже начатой операцией после cancel?

Темы

OperationQueue умеет зависимости между операциями, отмену, лимит одновременных операций и наблюдение за состоянием. У GCD есть очереди и группы, но нет объекта «задача» с этими рычагами.

Дополнительные вопросы

1. Свойством maxConcurrentOperationCount. Значение 1 делает очередь серийной по факту выполнения.

2. В GCD это DispatchGroup: enter на старте, leave в конце, notify когда счётчик нулевой. В OperationQueue у финальной операции добавляют зависимости на все параллельные, и она стартует последней.

3. cancel ставит isCancelled. Уже выполняющееся тело само не обрывается. Операция должна проверять флаг и выйти. Если она ещё не стартовала, до работы дело может не дойти.