swift3 GCD DispatchGroup && barr
2017-04-29 本文已影响0人
yurnery
Sample
import UIKit
final class ViewController: UIViewController {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// dispatchBarrier()
disPatchGroup()
}
}
fileprivate extension ViewController{
func disPatchGroup(){
DispatchQueue.global().async {
let queue = DispatchQueue.global()
let group = DispatchGroup()
let groupItem = DispatchWorkItem{
print("takeTimeTask1 finished +++++++++++++++++++++")
}
let item1 = DispatchWorkItem {[weak self] in
self?.takeTimeTask1()
}
let item2 = DispatchWorkItem {[weak self] in
self?.takeTimeTask2()
}
queue.async(group: group, execute: item1)
queue.async(group: group, execute: item1)
queue.async(group: group, execute: item2)
queue.async(group: group, execute: item2)
// guard group all tasks are finished, then perform this method
group.notify(queue: queue, work: groupItem)
}
}
func dispatchBarrier(){
DispatchQueue.global().async {
//barrier, the queue must user creat, global is fail
let queue = DispatchQueue.init(label: "barrier", qos: .userInitiated, attributes: .concurrent)
let barrierItem = DispatchWorkItem(qos: .userInitiated, flags: .barrier) {
print("takeTimeTask1 finished +++++++++++++++++++++++")
}
let item1 = DispatchWorkItem {[weak self] in
self?.takeTimeTask1()
}
let item2 = DispatchWorkItem {[weak self] in
self?.takeTimeTask2()
}
queue.async(execute: item1)
queue.async(execute: item1)
queue.async(execute: item1)
queue.async(execute: item1)
queue.async(execute: barrierItem)
queue.async(execute: item2)
queue.async(execute: item2)
queue.async(execute: item2)
queue.async(execute: item2)
}
}
private func takeTimeTask1(){
sleep(2)
print("takeTimeTask1-------", Thread.current)
}
private func takeTimeTask2(){
sleep(2)
print("takeTimeTask2-------", Thread.current)
}
}