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)
}