我有嵌套的异步任务。下面这个流程的函数:loadEpisodes(加载剧集列表) - >使用完成的数组遍历每集第一集,并为特定情节加载注释(多一个异步任务)。同步嵌套的异步任务
问题是:comletion(fullyEpisodes)在完成注释加载任务之前执行。我试图使用Dispatch Group(第二代码块),但它不工作。
func loadComments(comletion: @escaping ([Episode]) -> Void){
loadEpisodes(completion: {
episodes in
var fullyEpisodes = [Episode]()
for episode in episodes {
WebService().load(resource: episode.comment, comletion: {
comments in
if let comments = comments {
let _episode = Episode(id: episode.id, title: episode.title, comments: comments)
fullyEpisodes.append(_episode)
print("done")
}
})
}
comletion(fullyEpisodes)
})
}
实现了调度组:
func loadComments(comletion: @escaping ([Episode]) -> Void){
loadEpisodes(completion: {
episodes in
var fullyEpisodes = [Episode]()
let group = DispatchGroup()
for episode in episodes {
group.enter()
WebService().load(resource: episode.comment, comletion: {
comments in
if let comments = comments {
let _episode = Episode(id: episode.id, title: episode.title, comments: comments)
fullyEpisodes.append(_episode)
print("done")
}
})
group.leave()
}
group.wait()
group.notify(queue: .main, execute: {
comletion(fullyEpisodes)
})
})
}
当我试图通过“打印更换评论加载请求(”东西“)”(不是一个新的异步任务),调度组工作。
觉得你的意思'盛大中央dispatch'不'最大,共divisor';) –
@JacobKing:哎呀!我设置了错误的标签。感谢:D –
是的,令人讨厌的是,指定gcd标签将其替换为“最大公约数”(尽管关于大中央调度的堆栈溢出问题比最大公约数要多得多)。见http://meta.stackoverflow.com/q/251143/1271826或http://meta.stackexchange.com/questions/165133/propose-significant-change-in-the-definition-of-gcd-tag – Rob