June 12, 2021

Операции и OperationQueues

Давайте кратко поговорим об операционных очередях и дополнительном API, построенном поверх GCD, который использует параллельные очереди и модели задачи как операции, которые легко отменить и которые могут иметь свое выполнение, зависящее от завершения других операций.

Операции могут иметь приоритет, который определяет порядок выполнения, и добавляются к OperationQueues, которые выполняются асинхронно.

Рассмотрим основной пример:

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

Операции могут иметь приоритет и вторичное замыкание завершения, которое будет выполняться после завершения основного замыкания.

Мы можем добавить зависимость от op4 к op3, так что op4 будет ждать завершения операции op3.

Зависимости также могут быть удалены с помощью removeDependency (operation :) и сохранены в общедоступном массиве зависимостей.

Текущее состояние операции может быть проверено с использованием определенных свойств:

Вы можете отменить все операции, присутствующие в очереди, вызывая метод cancelAllOperations, который устанавливает флаг isCancelled для оставшихся в очереди операций. Одну операцию можно отменить, вызывая метод cancel:

Рекомендуется проверять свойство isCancelled внутри вашей операции, чтобы пропустить выполнение, если операция была отменена после того, как она была запланирована для выполнения очередью.

И, наконец, вы также можете остановить выполнение новых операций в очереди операций (текущая работа не будет затронута):