У меня есть серия HTTP-запросов, выполняемых последовательно с использованием Alamofire в списке функций, вызываемых в основной функции, runTask()
, которые я хочу иметь возможность остановить.Итак, я настроил вызов функции runTask()
в DispatchWorkItem
для каждой задачи, которую мне нужно запустить, и сохранил рабочий элемент в массиве так:
taskWorkItems.append(DispatchWorkItem { [weak self] in
concurrentQueue!.async {
runTask(task: task)
}
})
Затем я повторяюмассив рабочих элементов и вызвать функцию perform()
следующим образом:
for workItem in taskWorkItems {
workItem.perform()
}
Наконец, у меня в приложении есть кнопка, которую я хочу отменить рабочие элементы при нажатии, и у меня есть следующий кодчтобы это произошло:
for workItem in taskWorkItems {
concurrentQueue!.async {
workItem.cancel()
print(workItem.isCancelled)
}
}
workItem.isCancelled
печатает до true
;тем не менее, у меня есть журналы, настроенные в функциях, вызываемых runTask()
, и я все еще вижу функции, выполняющиеся, даже если вызван workItem.cancel()
и workItem.isCancelled
печатает true
.Что я делаю неправильно и как я могу остановить выполнение своих функций?