/* Page prose (es) */
"ClassicBugUnbalancedEnterLeave" = "# El error clásico: `enter`/`leave` desbalanceados\n\nUn grupo de despacho es tan correcto como tu contabilidad. La regla es absoluta: **exactamente un `leave()` por cada `enter()`, en cada camino.** Rómpela en cualquier dirección y obtienes un fallo distinto.\n\nMuy pocos `leave()` y el grupo se cuelga. Omite un `leave()` en algún camino de código y el contador nunca vuelve a cero. `notify` nunca se dispara; `wait()` espera para siempre.";
"ClassicBugUnbalancedEnterLeave-2" = "Los nombres de arriba no están vacíos, así que da la casualidad de que funciona, pero la forma es el peligro.\n\n* callout(Pruébalo): Añade una cadena vacía `\"\"` al array y ejecútalo de nuevo. Ese nombre vacío llega al `guard` y retorna *sin* llamar a `leave()`, así que el contador del grupo nunca vuelve a cero. El resultado: las tres bebidas reales se imprimen, pero `This may never print…` nunca lo hace, y la página sigue ejecutándose hasta que la detienes tú. Ese cuelgue silencioso, sin fallo ni error, solo un \"todo listo\" que nunca llega, es todo el error.\n\n> En el instante en que un `guard`, un `throw` o una rama de error retorna antes de `leave()`, esa tarea nunca sale del grupo, y tu callback de \"todo listo\" silenciosamente nunca se ejecuta. **Un `defer { group.leave() }` justo después de `enter()` garantiza el leave en cada camino de salida** y es la cura estándar.\n\nDemasiados `leave()` crean un fallo. Llama a `leave()` más veces de las que llamaste a `enter()` y la cuenta del grupo se vuelve negativa, lo que provoca una interrupción en tiempo de ejecución con un error como *\"Unbalanced call to dispatch_group_leave.\"* Esto suele venir de poner `enter()` en el lugar equivocado: por ejemplo, llamarlo una vez *fuera* del bucle pero `leave()` *dentro* de cada iteración. El contador llega a cero tras la primera tarea, `notify` **se dispara antes de tiempo** mientras otras tareas todavía se ejecutan, y los leaves de más entonces provocan el fallo. Mantén `enter()` y `leave()` emparejados al mismo nivel.\n\n[Anterior](@previous)  |  página 5 de 8  |  [Siguiente: DispatchSemaphore: limitar cuántas se ejecutan a la vez](@next)";
