Après avoir lu tant de messages à propos de parallèle et concurrentes, je continue de confondre ce qui est la bonne façon d'extraire des données. Par exemple, dans mon projet, j'ai un bouton permettant à l'utilisateur d'extraire des données. Mon code est quelque chose comme ci-dessous.dispatch_async vs dispatch_sync dans les données d'extraction. Swift
var array = [Int]()
func fetchData() {
....
....
response(objects: [object], error: NSError?) {
for object in objects {
array.append(object.number) // assume object.number return an Int
}
// confuse here. Should I use async here because I am worry if the user
// click the fetchData button more than one time, the append and make
// function will be happened at the same time. Or, is there anything I
// made a wrong assumption? I guess I need a serial operation. Correct?
dispatch_async(dispatch_get_main_queue()) {
makeCollectionView() // using the data in array
}
}
}
MISE À JOUR
Essayé pour exécuter ce code. 10000-19999 est exécuté après 0-9999. Il semble que la deuxième async n'arrêtera pas le premier async à traiter son opération.
dispatch_async(dispatch_get_main_queue(), {() -> Void in
for i in 0 ..< 10000 {
print(i)
}
})
dispatch_async(dispatch_get_main_queue(), {() -> Void in
for i in 10000 ..< 20000 {
print(i)
}
})
Merveilleuse réponse pour effacer ma confusion. Merci –
Opps. Encore une question. Si j'appelle deux fois dispatch_async (queue) {makeCollectionView()}, le second makeCollectionView sera exécuté juste après que le premier ou le second arrêtera immédiatement le premier et s'exécutera? si elle arrête le premier immédiatement, y a-t-il une fonction que je peux mettre comme première tâche à faire en file d'attente? –
Mise à jour des informations –