贡献作者 -【XJDomain】
博客XJ: https://my.oschina.net/shengbingli/blog
GitHub直播地址: https://github.com/lishengbing/XJDomainLive
01-基本使用-全局异步队列
DispatchQueue.global().async { //耗时操作 }
02-主队列
DispatchQueue.main.async { //刷新UI }
03-延迟操作
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) { // 2秒后执行 }
04-队列组
队列组就是把任务放在
DispatchGroup
中(入组),当任务执行完毕时(出组),即当DispatchGroup
中没有任务时,调用监听方法notify
,注意:入组和出组一定要成对出现,有几个入组,就一定需要有几个出组。
// 创建一个队列组 let group = DispatchGroup() // A任务入组 group.enter() // A任务异步操作 DispatchQueue.global().async(group: group,execute: DispatchWorkItem(block: { sleep(2) print("download task A ...") // 出组 group.leave() })) // B任务入组 group.enter() // B任务异步操作 DispatchQueue.global().async(group: group,execute: DispatchWorkItem(block: { sleep(2) print("download task B ...") // 出组 group.leave() })) // 主线程监听,只有当队列组中没有任务,才会执行闭包。如果多次调用该方法,每次都会去检查队列组中是否有任务,如果没有任务才执行 group.notify(queue: DispatchQueue.main) { print("complete!") }
因为task A和task B是加在全局队列中,所以它们的执行顺序由系统决定,但是complete一定是在两个任务完成后才执行。