/* Page prose (fr) */
"WaitBlockingAlternative" = "# `wait()`: l'alternative bloquante\n\n`notify` te remet un callback. Parfois tu veux au contraire **t'arrêter et attendre** ici même jusqu'à ce que le groupe soit vide. C'est `wait()`, montré ci-dessous.";
"WaitBlockingAlternative-2" = "**Observe l'exécution:** les trois lignes `Finished:` s'affichent (dans n'importe quel ordre), et c'est seulement ensuite que `All prep done` s'affiche. Remarque que tu n'as **pas** eu besoin de `needsIndefiniteExecution` ici: `wait()` bloque le code de haut niveau jusqu'à ce que le travail se termine, donc la page ne peut pas se terminer trop tôt.\n\nCette commodité cache un piège. **`wait()` bloque le thread qui l'appelle.** Dans le code de haut niveau d'un Playground, ce thread est le thread principal, et le bloquer ici est inoffensif parce que rien d'autre n'en a besoin. **Dans une vraie app, appeler `wait()` sur le thread principal fige l'UI** pendant toute la durée, ce qui est précisément le genre de gel dont un chapitre précédent t'a averti. Le remède est l'une de deux choses:\n\n* Préfère `notify(queue:)`: il ne bloque pas, donc rien ne se fige.\n* Si tu as vraiment besoin de bloquer, fais l'attente **sur une file d'arrière-plan**, jamais sur le thread principal:\n\n```swift\nDispatchQueue.global().async {\n    group.wait()                 // block a background thread, fine\n    DispatchQueue.main.async {\n        print(\"Batch complete: now update the UI\")\n    }\n}\n```\n\nTu peux aussi passer un délai d'expiration: `group.wait(timeout: .now() + 2)` renvoie `.timedOut` au lieu d'attendre indéfiniment, ce qui est une bonne habitude pour qu'une tâche coincée ne puisse pas te bloquer sans fin.\n\n[Précédent](@previous)  |  page 4 sur 8  |  [Suivant: Le bug classique: enter/leave déséquilibrés](@next)";
