/* Page prose (es) */
"ProducingWithAsyncStream" = "# Producir una secuencia con AsyncStream\n\nConsumir es la mitad de la historia. La mayoría de las veces *tú* eres quien tiene valores goteando (de un temporizador, un callback de ubicación, un sensor Bluetooth), y quieres entregarlos a un bucle `for await`. **`AsyncStream` es la herramienta que convierte una fuente de valores de uno en uno en una secuencia asíncrona.**\n\nLa creas con una clausura que recibe una **continuación**, un objeto al que llamas para empujar valores dentro del stream:\n\n* `continuation.yield(value)` emite un elemento a quien esté iterando.\n* `continuation.finish()` termina el stream, así que el bucle del consumidor se detiene.\n\nConectemos la estación meteorológica de la azotea. Emite una lectura aproximadamente cada 0.3 segundos, cinco veces, y luego termina.";
"ProducingWithAsyncStream-2" = "**Míralo en acción:** las dos líneas `print` se intercalan, un par a la vez, más o menos cada 0.3 segundos: `sensor emits reading 1`, luego `received ...°C`, luego una pausa, luego la lectura 2, y así sucesivamente. Tras la quinta lectura, `finish()` termina el stream, el bucle sale, y se imprime `Stream finished`. Estás literalmente viendo llegar valores con el tiempo, algo que ningún array a secas podría mostrarte.\n\n* callout(Pruébalo): Cambia `1...5` a `1...8` y el retardo a `.milliseconds(150)`. El stream ahora emite más lecturas, más rápido. La línea `finish()` sigue terminándolo limpiamente.\n\nUnas cuantas cosas que vale la pena nombrar:\n\n* La clausura ejecuta su propia `Task` para hacer la espera. `yield` puede llamarse desde cualquier sitio, cualquier número de veces: desde un temporizador, un método delegado, un completion handler. Cada llamada entrega un elemento al bucle.\n* Si nadie ha esperado todavía el siguiente valor, `AsyncStream` lo **almacena en un búfer**, así que no perderás una lectura que llegue mientras el consumidor está ocupado.\n* Los valores que emites con `yield` deberían ser **`Sendable`**: saltan de la tarea productora a la consumidora. `Double` e `Int` ya lo son, así que la comprobación de carreras de datos de Swift 6 se mantiene callada aquí.\n\n[Anterior](@previous)  |  página 3 de 7  |  [Siguiente: Limpiar con onTermination](@next)";
