/* Page prose (fr) */
"ClassicBugUnbalancedEnterLeave" = "# Le bug classique: `enter`/`leave` déséquilibrés\n\nUn Dispatch Group n'est correct que dans la mesure où ta comptabilité l'est. La règle est absolue: **exactement un `leave()` pour chaque `enter()`, sur chaque chemin.** Enfreins-la dans un sens ou dans l'autre et tu obtiens une défaillance distincte.\n\nTrop peu de `leave()` et le groupe se bloque. Rate un `leave()` sur un certain chemin de code et le compteur ne revient jamais à zéro. `notify` ne se déclenche jamais; `wait()` attend pour toujours.";
"ClassicBugUnbalancedEnterLeave-2" = "Les noms ci-dessus ne sont pas vides, donc par hasard ça marche, mais c'est la forme qui est le danger.\n\n* callout(Essaie): Ajoute une chaîne vide `\"\"` au tableau et exécute-le à nouveau. Ce nom vide atteint le `guard` et retourne *sans* appeler `leave()`, donc le compteur du groupe ne revient jamais à zéro. Le résultat: les trois vraies boissons s'affichent, mais `This may never print…` ne s'affiche jamais, et la page continue de s'exécuter jusqu'à ce que tu l'arrêtes toi-même. Ce blocage silencieux, sans plantage ni erreur, juste un \"tout est terminé\" qui n'arrive jamais, c'est tout le bug.\n\n> À l'instant où un `guard`, un `throw` ou une branche d'erreur retourne avant `leave()`, cette tâche ne quitte jamais le groupe, et ton callback \"tout est terminé\" ne s'exécute silencieusement jamais. **Un `defer { group.leave() }` juste après `enter()` garantit le leave sur chaque chemin de sortie** et c'est le remède standard.\n\nTrop de `leave()` crée un plantage. Appelle `leave()` plus de fois que tu n'as appelé `enter()` et le compte du groupe devient négatif, ce qui provoque une interruption à l'exécution avec une erreur comme *\"Unbalanced call to dispatch_group_leave.\"* Cela vient généralement de mettre `enter()` au mauvais endroit: par exemple, l'appeler une fois *en dehors* de la boucle mais `leave()` *à l'intérieur* de chaque itération. Le compteur atteint zéro après la première tâche, `notify` **se déclenche trop tôt** alors que d'autres tâches s'exécutent encore, et les leaves en trop provoquent ensuite le plantage. Garde `enter()` et `leave()` appariés au même niveau.\n\n[Précédent](@previous)  |  page 5 sur 8  |  [Suivant: DispatchSemaphore: limiter combien s'exécutent à la fois](@next)";
