Orden de ejecución asíncrono de cierre rápido

En mi modelo, tengo la función de recuperar datos que esperan un controlador de finalización 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)
        })
}

Llama a otra función que realiza la carga asíncrona de contactos, a la que reenvío mi finalización

La llamada defetchMostRecent con la finalización se ve así:

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

Esto a veces funciona, pero muy a menudo el orden de ejecución no es el que esperaba. El problema es que a vecescompletion() debajo// 2 se ejecuta antes del alcance deif debajo// 1 estuvo terminado.

¿Porqué es eso? ¿Cómo puedo asegurar que la ejecución de// 2 se inicia después// 1?