/* Page prose (es) */
"WhenAStreamCanFail" = "# Cuando un stream puede fallar: AsyncThrowingStream\n\nLos sensores reales se desconectan. Un stream que puede *fallar* (no solo terminar) es un **`AsyncThrowingStream`**. Funciona exactamente como `AsyncStream`, con dos diferencias: puedes terminarlo con un error, y el consumidor itera con `for try await` dentro de un `do-try-catch`.";
"WhenAStreamCanFail-2" = "**Míralo en acción:** dos lecturas se imprimen, luego `finish(throwing:)` termina el stream *con* un error. Ese error se lanza fuera del bucle, se salta `Finished cleanly`, y aterriza en `catch`, imprimiendo `Stream failed: disconnected`. El `try` de `for try await` es lo que le da a ese error un lugar adonde ir; déjalo fuera y el compilador te lo recordará.\n\n* callout(Pruébalo): Cambia `finish(throwing: SensorFault.disconnected)` por un simple `finish()`. El bucle ahora cae hasta `Finished cleanly` y `catch` nunca se ejecuta. Terminar y fallar son dos salidas distintas.\n\nRecurre a `AsyncThrowingStream` cuando la fuente puede genuinamente dar error. Si solo puede *terminar*, un `AsyncStream` a secas mantiene al consumidor más simple: no se requiere `do-try-catch`.\n\n* callout(El panorama más amplio): `AsyncStream` es la respuesta moderna a los viejos patrones de \"aquí tienes otro valor\": métodos delegados que se disparan repetidamente, observadores de `NotificationCenter`, completion handlers llamados más de una vez. En lugar de dispersar esa lógica por métodos de callback, envuelves la fuente una vez y dejas que cualquiera la consuma con un simple bucle `for await`. Puentear un *único* callback hacia `await` es el trabajo del capítulo siguiente: las continuaciones.\n\n[Anterior](@previous)  |  página 6 de 7  |  [Siguiente: Resumen](@next)";
