Faut-il utiliser le thread principal pour continuer après avoir appelé une fonction asynchrone avec await à l'intérieur d'une tâche lancée dans la méthode viewDidLoad ?
sobes.tech IA
Réponse de l'IA
En iOS, si vous appelez une fonction asynchrone avec await à l’intérieur d’une tâche lancée dans viewDidLoad, il est important de comprendre sur quel thread la suite sera exécutée après await.
Par défaut, si vous utilisez await dans un Task sans spécifier de priorités ou de dispatchers, la continuation peut se produire sur n’importe quel thread, pas nécessairement le thread principal. Cela peut poser problème si vous mettez à jour l’interface utilisateur, car toutes les modifications de l’interface doivent se faire sur le thread principal.
Pour garantir que le code continue sur le thread principal après await, vous pouvez explicitement basculer sur le dispatcher principal avec await MainActor.run { ... } ou utiliser @MainActor pour la méthode ou la classe.
Exemple :
override func viewDidLoad() {
super.viewDidLoad()
Task {
let data = await fetchData()
await MainActor.run {
self.updateUI(with: data)
}
}
}
Ainsi, il faut utiliser le thread principal pour continuer si vous devez travailler avec l’UI après une opération asynchrone.