ネストされた非同期タスクがあります。 loadEpisodes(エピソードのリストをロードする) - >各エピソード1を介して完了からループまでの配列を使用して、特定のエピソードのコメント(さらに1つの非同期タスク)をロードします。ネストされた非同期タスクを同期する
問題は次のとおりです。comletion(fullyEpisodes)がコメントの読み込みタスクを完了する前に実行されました。 Dispatch Group(2番目のコードブロック)を使用しようとしましたが、機能しません。
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のタグを指定すると、大した共通の除数よりも大規模な中央ディスパッチに関するスタックオーバーフローに関する質問がはるかに多いにもかかわらず、gcdのタグを "最大公約数"に置き換えてください。 http://meta.stackoverflow.com/q/251143/1271826またはhttp://meta.stackexchange.com/questions/165133/propose-significant-change-in-the-definition-of-gcd-tag – Rob