DispatchWorkItem 是 GCD(Grand Central Dispatch)的一个封装,表示一个可执行的任务单元。
DispatchWorkItem可以在队列中异步执行,支持取消(cancel())或检查是否已被取消,附加完成回调(notify(queue:))。
基本用法
1、创建任务
let workItem = DispatchWorkItem {
print("开始执行任务")
}
DispatchQueue.global().async(execute: workItem)
创建一个异步任务workItem,放到全局队列执行。
2、取消任务
DispatchWorkItem 可以使用 cancel() 方法,调用后会发出请求取消信息。
workItem.cancel()
任务内部需要检查isCancelled,来决定是否提前退出。
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled { return } // 如果被取消,就退出
print(i)
}
}
如果没有isCancelled,cancel方法不会终止任务。
总结
DispatchWorkItem和Swift并发任务非常类似,在Swift 5.5+ 版本中,推荐使用DispatchWorkItem替代DispatchWorkItem。
Swift并发可以使用task.cancel()取消任务,也需要在任务内部检查task. isCancelled属性。
