Вы не поняли, как работают группы рассылки. Вы звоните dis()
, очевидно, полагая, что dispatch.notify
- это то, что вы называете. Это не так. Он вызывается для вас, когда каждый enter
сбалансирован на leave
. Типичная структура выглядит так: псевдокод:
let group = DispatchGroup()
// here we go...
group.enter()
_queue1_.async {
// ... do task here ...
group.leave()
}
group.enter()
_queue2_.async {
// ... do task here ...
group.leave()
}
group.enter()
_queue3_.async {
// ... do task here ...
group.leave()
}
// ... more as needed ...
group.notify(queue: DispatchQueue.main) {
// finished!
}
Вам нужно избавиться от этой причудливой структуры классов и собрать все вместе - группу диспетчеризации, вызовы enter
и leave
и блок notify
- в одном месте. Если вы не хотите этого делать, тогда это нецелесообразное использование группы рассылки (возможно, вы хотели что-то вроде Operation и OperationQueue).