Я не могу понять, почему следующий код вызывается из строя. Это сделано только для того, чтобы разоблачить заказ, в котором они вызваны. Это важно, потому что я использую их с вызовами веб-службы, которые должны ждать друг друга, а это не так. Таким образом, это может быть просто моя концепция использования GCD.Функции GCD, вызванные не по порядку
var group: dispatch_group_t = dispatch_group_create()
var groupTwo: dispatch_group_t = dispatch_group_create()
var queue: dispatch_queue_t = dispatch_get_main_queue()
dispatch_group_notify(groupTwo, queue) {() -> Void in
print("3rd") // Should be called 3rd
}
dispatch_group_enter(group)
print("1st") // Should be called 1st
dispatch_group_leave(group)
dispatch_group_notify(group, queue) {() -> Void in
dispatch_group_enter(groupTwo)
print("2nd") // Should be called 2nd
dispatch_group_leave(groupTwo)
}
Это приказ это печать в:
1st
3rd
2nd
Почему порядок не так? Должно ли не 3rd
получить вызов только один раз dispatch_group_leave(groupTwo)
называется? Почему он звонит заранее? Я подумал, что для этого был использован dispatch_group_notify()
.
EDIT: Извините, я только что установил имена групп. Сначала можно было отредактировать.
блока, где вы 'dispatch_group_enter (groupTwo)' выполняется после того, как в первый раз ваш первый 'dispatch_group_notify' проверяет,' groupTwo' пуст и печатает «третьего «как только он обнаружит, что это так. – dan
Я не думал, что 'dispatch_group_notify' даже получит вызов до' dispatch_group_leave'. Есть ли лучший способ добиться того, что я пытаюсь сделать? – chicobermuda
Не совсем понятно, что вы пытаетесь сделать. Я предполагаю, что вы выделили все детали для целей вопроса, но это затрудняет определение того, что вы должны делать. – dan