Ordem de execução assíncrona de fechamento rápido

No meu modelo tem a função de buscar dados que esperam o manipulador de conclusão como parâmetro:

func fetchMostRecent(completion: (sortedSections: [TableItem]) -> ()) {

        self.addressBook.loadContacts({
            (contacts: [APContact]?, error: NSError?) in
            // 1
            if let unwrappedContacts = contacts {
                for contact in unwrappedContacts {

                    // handle constacts
                    ...                        
                    self.mostRecent.append(...)
                }
            }
            // 2
            completion(sortedSections: self.mostRecent)
        })
}

Está chamando outra função que faz carregamento assíncrono de contatos, para o qual estou encaminhando minha conclusão

A chamada defetchMostRecent com conclusão é assim:

model.fetchMostRecent({(sortedSections: [TableItem]) in
    dispatch_async(dispatch_get_main_queue()) {
        // update some UI
        self.state = State.Loaded(sortedSections)
        self.tableView.reloadData()
    }
})

Isso às vezes funciona, mas muitas vezes a ordem de execução não é o que eu esperaria. O problema é que, às vezescompletion() sob// 2 é executado antes do escopo deif sob// 1 foi terminado.

Por que é que? Como posso garantir que a execução de// 2 é iniciado depois// 1?

questionAnswers(1)

yourAnswerToTheQuestion