/* Page prose (fr) */
"DispatchGroupFinishLine" = "# `DispatchGroup`: une ligne d'arrivée pour de nombreuses tâches\n\nUn **`DispatchGroup`** est un compteur qui suit un ensemble de tâches afin que tu puisses être averti quand tout l'ensemble se termine. Tu marques qu'une tâche rejoint le groupe avec `enter()`, et tu la marques comme terminée avec `leave()`. Quand le nombre d'appels à `leave()` rattrape le nombre d'appels à `enter()` (le groupe est **vide**), le groupe se déclenche.";
"DispatchGroupFinishLine-2" = "`notify(queue:)` est la ligne clé: elle enregistre un bloc pour s'exécuter **plus tard**, sur la file que tu nommes, au moment où le groupe devient vide. Elle **ne** bloque **pas**. Ton code continue de s'écouler juste après.\n\n**Observe l'exécution:** deux choses à remarquer. D'abord, `📤 Batch sent...` s'affiche avant toute boisson; `notify` n'a pas bloqué. Ensuite, les boissons apparaissent dans l'**ordre d'arrivée** (cold brew, puis espresso, puis latte), et *non* dans l'ordre où tu les as démarrées, exactement la leçon d'un chapitre précédent. Mais la ligne du plateau vient toujours **en dernier**, après les trois, parce que le groupe a attendu chaque `leave()`. C'est tout l'intérêt: tu obtiens un unique callback \"tout est terminé\" bien propre, quel que soit l'ordre dans lequel les tâches se terminent.\n\n* callout(Essaie): Échange les temps d'infusion pour que le latte soit à `0.1` et le cold brew à `0.9`. Les boissons se réordonnent, mais la ligne du plateau tombe-t-elle encore en dernier?\n\n> Quand le travail est une simple closure `async`, tu peux sauter la paire manuelle et laisser la file l'équilibrer pour toi: `barista.async(group: group) { ... }`. C'est un **raccourci** qui appelle `enter()` avant ton bloc et `leave()` après. Utilise le `enter()`/`leave()` manuel quand le moment \"terminé\" est un *callback* qui se déclenche plus tard (comme un completion handler réseau) où il n'y a pas d'unique closure dont la fin signifie \"terminé.\"\n\n[Précédent](@previous)  |  page 3 sur 8  |  [Suivant: wait(): l'alternative bloquante](@next)";
