1

디스패치 그룹을 사용하여 두 개의 비동기 프로세스가 완료 될 때까지 대기하려고합니다. 그러나 두 번째 비동기 함수는 데이터베이스에있는 메시지의 양을 반복합니다.비동기 함수가 여러 번 실행되기 때문에 Dispatch 그룹이 충돌 함

두 번째 비동기 함수가 여러 번 실행되어 디스패치 휴가 수가 디스패치 수보다 많으므로 디스패치 수가 균형을 이루지 않아 아래 코드가 충돌합니다. 이 경우 디스패치 그룹을 구현하는 다른 방법이 있습니까?

dispatch_group_enter(dispatch_group) 
ref.observeEventType(.ChildAdded, withBlock: {(snapshot) in 
//execute once 
dispatch_group_leave(self.dispatch_group) 
} 

dispatch_group_enter(dispatch_group) 
ref.observeEventType(.ChildAdded, withBlock: {(snapshot) in 
//execute 1000 times 
dispatch_group_leave(self.dispatch_group) 
} 

dispatch_group_notify(self.dispatch_group, dispatch_get_main_queue()) { 
print("done") 
} 
+0

그래서 두 번째 블록 전체가 여러 번 실행됩니까? – Paulw11

답변

0

이 질문이 있은 지 오래되었지만 가능한 해결 방법이 있습니다. 그것은 당신이 한 번 그룹을 입력하기 때문에 충돌,하지만에 대한 1000 배를 떠나 : 당신은 자주 피고측은 그것을 입력 한 그룹을 두는 것이, 당신은 확인해야

dispatch_group_enter(dispatch_group) 
ref.observeEventType(.ChildAdded, withBlock: {(snapshot) in 
//execute 1000 times 
dispatch_group_leave(self.dispatch_group) 
} 

.

관련 문제