Swift iOS - понимание контекста блока уведомления о выполнении DispatchWorkItem

Я исследую DispatchWorkItemчтобы адаптировать мои требования к приложению. Цель состоит в том, чтобы написать общий TaskScheduler для планирования действий, передаваемых ему в другом потоке. TaskScheduler также должен иметь возможность отменять действия, которые больше не требуются (хороший пример - отмена выборки данных для ячеек, выходящих за пределы области просмотра).

Я добиваюсь этого с помощью идентификатора и карты id-to-DispatchWorkItem. Карта помогает отменить действия через переданный идентификатор. Чтобы очистить записи карты после завершения задач, я используюnotify на DispatchWorkItem.

Приведенный ниже фрагмент кода очищает правильные записи на карте? Скажем, у нас есть 3 действия с идентификаторами 1, 2 и 3. Действия 1 и 3 отменяются, а действие 2 завершает свое выполнение. Будет ли приведенный ниже код правильно аннулировать запись на карте для действия 2?

self.queue = DispatchQueue(label: "com.serial.queue", qos: DispatchQoS.userInitiated) // Can be .concurrent as well

func schedule(id: UInt, action: @escaping () -> Void) {
        cancelAction(with: id)
        let dwi = DispatchWorkItem(block: action)
        idToDWI[id] = dwi <------------------------- id = 2
        
        dwi.notify(queue: .main, execute: {
            idToDWI[id] = nil <------------------------- id = 2?
            print("<<<< Completed \(id)")
        })
        
        self.queue.async(execute: dwi)
    }

0 ответов

Другие вопросы по тегам