/* Page prose (es) */
"StructuredGuarantee" = "# La garantía estructurada\n\nLos grupos de tareas son **concurrencia estructurada**, y esa palabra \"estructurada\" carga con una promesa que vale la pena decir en voz alta:\n\n**El ámbito de `withTaskGroup` no retornará hasta que cada tarea hija haya terminado o haya sido cancelada.** Ninguna hija puede sobrevivir al grupo. Cuando el control pasa la llave de cierre, hay cero tareas sobrantes ejecutándose en las sombras.\n\nPor eso nunca tienes que rastrear las tareas hijas a mano, cancelarlas tú mismo, ni preocuparte de que una se haya escapado y siga quemando CPU después de que seguiste adelante. La *estructura* de tu código, las llaves del grupo, acota el *tiempo de vida* del trabajo. Incluso en el ejemplo que lanza de la página anterior, el grupo no retornó hasta que las hermanas canceladas se habían detenido de verdad.\n\nLa cancelación fluye igual que en el capítulo [Tareas y cancelación](Tasks%20and%20Cancellation.playgroundchapter/Overview): **hacia abajo por el árbol**. Cancela la tarea que es dueña del grupo, y cada hija se marca como cancelada también. Y una hija es solo una tarea común, así que observa la cancelación de la misma forma: `Task.sleep` lanza `CancellationError`, y puedes comprobar `Task.isCancelled` en un bucle largo para retirarte pronto.";
"StructuredGuarantee-2" = "**Míralo en acción:** cancelar `stack` se propaga al grupo y hacia abajo a las 100 hijas. Sus llamadas a `Task.sleep` lanzan y se desenredan (aquí el `try?` se traga el error y produce `nil`, así que esos fotogramas aportan su valor de reserva), y el grupo aun así retorna limpiamente, porque la garantía se mantiene incluso cuando la respuesta es \"detente.\" Nada se fuga.\n\n[Anterior](@previous)  |  página 7 de 9  |  [Siguiente: Limitar cuántas se ejecutan a la vez](@next)";
