【发布时间】:2018-10-03 20:28:36
【问题描述】:
我在主函数runTask() 中调用的函数列表中使用 Alamofire 按顺序发出了一系列 HTTP 请求,我希望能够停止这些请求。因此,我在DispatchWorkItem 中为我需要运行的每个任务设置了runTask() 函数调用,并将工作项存储在一个数组中,如下所示:
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,我仍然看到这些函数正在执行。我做错了什么,如何停止执行我的功能?
【问题讨论】:
-
workItem 的
isCancelled属性指出任务当前是否被取消。如果您取消一个 WorkItem,如果执行尚未开始,则该任务将被完全取消。如果它开始并被取消,isCancelled属性将指示true,因此您可以实现您的取消逻辑。关于如何在 Alamofire stackoverflow.com/questions/41478122/cancel-a-request-alamofire 上取消请求有一个先前的答案,如果需要,您应该在您的工作项逻辑中执行request.cancel()函数。 -
@Orlando 这正是我所需要的,谢谢!
标签: ios swift alamofire grand-central-dispatch dispatchworkitem