/* Page prose (fr) */
"AsyncSeqWrappingUp" = "# Récapitulatif\n\nUne séquence asynchrone est l'outil pour les valeurs qui arrivent *au fil du temps*, consommées avec une boucle `for await` qui se suspend entre elles au lieu de bloquer. Le danger récurrent, c'est un stream qui ne se termine jamais, ou qui ne se nettoie jamais lui-même. Garde à l'esprit les points du cycle de vie ci-dessous et les streams se comporteront bien.\n\n* Une **séquence asynchrone** livre des valeurs *au fil du temps*; boucle dessus avec `for await` dans une `Task`, qui se suspend entre les éléments au lieu de bloquer. Sur un simple tableau, une boucle `for` normale est correcte et plus claire.\n* **`AsyncStream`** transforme une source de callback/minuteur/événements en une séquence asynchrone: `continuation.yield(_:)` émet, `continuation.finish()` la termine, et piège: sans ce `finish()` (ou une erreur, ou une annulation) la boucle du consommateur ne s'arrête jamais.\n* **`onTermination`** s'exécute une fois quand le stream se termine, normalement ou de façon anticipée, donc c'est là que tu annules les minuteurs et libères les ressources; saute-le et un producteur en arrière-plan fuit.\n* **Annuler la tâche consommatrice** (ou faire `break`) arrête la consommation à la prochaine suspension; attendre la prochaine valeur *est* la vérification d'annulation.\n* **`AsyncThrowingStream`** ajoute l'échec: termine avec `finish(throwing:)` et consomme avec `for try await` dans `do-try-catch`.\n* C'est le remplacement moderne des patrons de delegate-répété et de multi-callback.\n\n---\n\n## La suite\n\n**[Continuations](Continuations.playgroundchapter/Overview)**: comment faire le pont entre une *seule* API de callback à l'ancienne et un `await` propre, la pièce manquante à côté d'`AsyncStream`.\n\n[Précédent](@previous)  |  page 7 sur 7";
