Il y a 3 ans, Apple nous présentait Swift Concurrency, une évolution forte de Swift 5 qui annonçait le début d’un long chemin vers Swift 6. En parallèle, le langage s’est doucement, mais sûrement ouvert à d’autres plateformes, notamment embarquées. Et nous y sommes aujourd’hui : toute les conditions sont désormais réunies afin de passer à une nouvelle version majeure du langage.
Swift Concurrency : gestion optimale des tâches parallèles
Nous en avions déjà parlé à sa sortie : Swift Concurrency améliore l’efficacité des tâches exécutées en parallèle. Cela passe d’abord par une meilleure orchestration au niveau du code de ces tâches qui avanceront en parallèle.
Imaginons une application qui permet de télécharger des images afin de les afficher à l’écran. Lorsque l’utilisateur appuie sur un bouton « Télécharger », plusieurs actions vont être enclenchées en parallèle. Une tâche va se charger de récupérer l’image, mais une autre va afficher un indicateur de chargement. Cela donne une réponse immédiate à l’utilisateur et évite de bloquer l’app pendant le chargement.
Sur le plan technique, l’action de l’utilisateur sur l’interface est placée dans le fil d’action qui a la plus haute priorité, nommé « Main Actor ». En parallèle, la tâche de gestion d’accès aux données va réaliser plusieurs opérations successives : elle va d’abord vérifier si l’image demandée existe déjà sur le stockage local. À défaut, elle ira la télécharger sur le web, via une autre tâche. Sans entrer dans les détails trop techniques, on peut utiliser les « acteurs » pour faire en sorte qu’un téléchargement ne soit initié qu’une seule fois et que son résultat soit retourné aux différents appelants.