在 swift4.0中使用DispatchWorkItem代替了原来OC中的dispatch_block_t。
在DispatchQueue执行操作,直接传入一个() -> Void 类型的闭包外,还可以传入一个DispatchWorkItem任务对象,DispatchWorkItem初始化方法可以配置Qos和DispatchWorkItemFlags,但是这两个参数都有默认值,所以也可以只传入一个闭包。
基本使用方法
let item = DispatchWorkItem{
//这里可以添加要执行的任务 可以添加多个
Thread.sleep(forTimeInterval: 2)
}
let createGlobal = DispatchQueue(label: "com.HomeImageDownload.test", qos: .default, attributes: .concurrent)
///异步执行
createGlobal.async {
item.perform()
}
///执行完毕添加通知
item.notify(queue: createGlobal) {
DispatchQueue.main.async {
//更新UI
}
}
`DispatchWorkItem`也有`wait`方法使用方法和`DispatchGroup`一样,调用会等待这个`WorkItem`执行完毕。会阻塞当前线程。
也可以使用cancel()提前取消任务。