/* Page prose (es) */
"WaitBlockingAlternative" = "# `wait()`: la alternativa que bloquea\n\n`notify` te entrega un callback. A veces, en cambio, quieres **detenerte y esperar** aquí mismo hasta que el grupo esté vacío. Eso es `wait()`, que se muestra abajo.";
"WaitBlockingAlternative-2" = "**Míralo en acción:** las tres líneas `Finished:` se imprimen (en cualquier orden), y solo entonces se imprime `All prep done`. Fíjate en que aquí **no** necesitaste `needsIndefiniteExecution`: `wait()` bloquea el código de nivel superior hasta que el trabajo se completa, así que la página no puede terminar antes de tiempo.\n\nEsa comodidad esconde una trampa. **`wait()` bloquea el hilo que lo llama.** En el código de nivel superior de un Playground ese hilo es el hilo principal, y bloquearlo aquí es inofensivo porque nada más lo necesita. **En una app real, llamar a `wait()` en el hilo principal congela la UI** durante toda la duración, que es precisamente el tipo de congelamiento del que te advirtió un capítulo anterior. La solución es una de dos cosas:\n\n* Prefiere `notify(queue:)`: no bloquea, así que nada se congela.\n* Si de verdad necesitas bloquear, haz la espera **en una cola en segundo plano**, nunca en el hilo 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\nTambién puedes pasar un tiempo límite: `group.wait(timeout: .now() + 2)` devuelve `.timedOut` en lugar de esperar para siempre, lo cual es un buen hábito para que una tarea atascada no pueda colgarte indefinidamente.\n\n[Anterior](@previous)  |  página 4 de 8  |  [Siguiente: El error clásico: enter/leave desbalanceados](@next)";
