/* Page prose (es) */
"AsyncSeqWrappingUp" = "# Resumen\n\nUna secuencia asíncrona es la herramienta para valores que llegan *con el tiempo*, consumidos con un bucle `for await` que se suspende entre ellos en lugar de bloquear. El peligro recurrente es un stream que nunca termina, o que nunca se limpia a sí mismo. Mantén a la vista los puntos del ciclo de vida de abajo y los streams se portarán bien.\n\n* Una **secuencia asíncrona** entrega valores *con el tiempo*; itérala con `for await` dentro de una `Task`, que se suspende entre elementos en lugar de bloquear. Sobre un array a secas, un bucle `for` normal es correcto y más claro.\n* **`AsyncStream`** convierte una fuente de callbacks/temporizador/eventos en una secuencia asíncrona: `continuation.yield(_:)` emite, `continuation.finish()` la termina, y trampa: sin ese `finish()` (o un error, o una cancelación) el bucle del consumidor nunca se detiene.\n* **`onTermination`** se ejecuta una vez cuando el stream termina, con normalidad o antes de tiempo, así que es donde cancelas temporizadores y liberas recursos; sáltatelo y un productor en segundo plano se fuga.\n* **Cancelar la tarea consumidora** (o hacer `break`) detiene el consumo en la siguiente suspensión; esperar el siguiente valor *es* la comprobación de cancelación.\n* **`AsyncThrowingStream`** añade el fallo: termina con `finish(throwing:)` y consume con `for try await` dentro de `do-try-catch`.\n* Este es el reemplazo moderno de los patrones de delegado-repetido y multi-callback.\n\n---\n\n## A continuación\n\n**[Continuaciones](Continuations.playgroundchapter/Overview)**: cómo puentear una *única* API de callback al viejo estilo hacia un `await` limpio, la pieza que falta junto a `AsyncStream`.\n\n[Anterior](@previous)  |  página 7 de 7";
