ios - DispatchGroup doesn't work as expected -
i have made dispatchgroup , run 2 async tasks. 1 on main , other 1 on global().
as long understand, dispatchgroup.notify's block should invoked once tasks done doesn't work thought.
class que { let group = dispatchgroup() init() { group.notify(queue: .main) { print("group done") } } func run() { doc() dod() } fileprivate func doc() { group.enter() dispatchqueue.main.async(group: group) { var rst = 0 idx in 0 ..< 500 { rst += idx } print("work item c done") self.group.leave() } } fileprivate func dod() { group.enter() dispatchqueue.global().async(group: group) { var rst = 0 idx in 0 ..< 50 { rst += idx } print("work item d done") self.group.leave() } } } the result is
work item d done group done work item c done i want know why not
work item d done work item c done group done if made c , d task run on global() queue, worked.
you put call notify in wrong place , called far early.
most want call notify @ end of run method.
init() { } func run() { doc() dod() group.notify(queue: .main) { print("group done") } } note says in documentation notify method:
schedules work item submitted queue when group of previously submitted block objects have completed.
the bold mine.
Comments
Post a Comment