[Swift 開發] GCD常用方法
阿新 • • 發佈:2019-01-27
GCD常用的用法
子執行緒
DispatchQueue.global().async {
print("開一條全域性佇列非同步執行任務")
}
主執行緒
DispatchQueue.main.async {
print("在主佇列執行任務")
}
wait
var myQueue = DispatchQueue(label: "第一條執行緒") var myQueue2 = DispatchQueue(label: "第二條執行緒") let group = DispatchGroup() myQueue.async(group: group, qos: .default, flags: []) { for _ in 0...10 { print("耗時任務一") } } myQueue.async(group: group, qos: .default, flags: []) { for _ in 0...10 { print("耗時任務二") sleep(UInt32(3)) } } //等待上面任務執行,會阻塞當前執行緒,超時就執行下面的,上面的繼續執行。可以無限等待 .distantFuture let result = group.wait(timeout: .now() + 2.0) switch result { case .success: print("不超時, 上面的兩個任務都執行完") case .timedOut: print("超時了, 上面的任務還沒執行完執行這了") } print("接下來的操作")
notify
let group = DispatchGroup() myQueue?.async(group: group, qos: .default, flags: [], execute: { for _ in 0...10 { print("耗時任務一") } }) myQueue?.async(group: group, qos: .default, flags: [], execute: { for _ in 0...10 { print("耗時任務二") } }) //執行完上面的兩個耗時操作, 回到myQueue佇列中執行下一步的任務 group.notify(queue: myQueue!) { print("回到該佇列中執行") }
barrier
myQueue?.async {//任務一 for _ in 0...10 { print("......") } } myQueue?.async {//任務二 for _ in 0...10 { print("++++++"); } } // barrier 會等待上面執行完畢再執行下面的,會阻塞當前執行緒 // myQueue?.async(flags:.barrier ,execute: {//1. // print("000000") // }) myQueue?.async(group: nil, qos: .default, flags: .barrier, execute: {//2. print("000000") }) myQueue?.async { print("111111") }