/* Page prose (fr) */
"WhenAStreamCanFail" = "# Quand un stream peut échouer: AsyncThrowingStream\n\nLes vrais capteurs se déconnectent. Un stream qui peut *échouer* (pas seulement se terminer) est un **`AsyncThrowingStream`**. Il fonctionne exactement comme `AsyncStream`, avec deux différences: tu peux le terminer avec une erreur, et le consommateur boucle avec `for try await` dans un `do-try-catch`.";
"WhenAStreamCanFail-2" = "**Observe l'exécution:** deux mesures s'affichent, puis `finish(throwing:)` termine le stream *avec* une erreur. Cette erreur est lancée hors de la boucle, saute `Finished cleanly`, et atterrit dans `catch`, affichant `Stream failed: disconnected`. Le `try` de `for try await` est ce qui donne à cette erreur un endroit où aller; laisse-le de côté et le compilateur te le rappellera.\n\n* callout(Essaie): Remplace `finish(throwing: SensorFault.disconnected)` par un simple `finish()`. La boucle poursuit maintenant jusqu'à `Finished cleanly` et `catch` ne s'exécute jamais. Se terminer et échouer sont deux sorties différentes.\n\nRecours à `AsyncThrowingStream` quand la source peut vraiment tomber en erreur. Si elle ne peut que *se terminer*, un simple `AsyncStream` garde le consommateur plus simple: pas de `do-try-catch` requis.\n\n* callout(La vue d'ensemble): `AsyncStream` est la réponse moderne aux anciens patrons de \"voici une autre valeur\": méthodes delegate qui se déclenchent à répétition, observateurs de `NotificationCenter`, completion handlers appelés plus d'une fois. Au lieu d'éparpiller cette logique à travers des méthodes de callback, tu enveloppes la source une fois et laisses quiconque la consommer avec une simple boucle `for await`. Faire le pont entre un *seul* callback et `await`, c'est le travail du chapitre suivant: les continuations.\n\n[Précédent](@previous)  |  page 6 sur 7  |  [Suivant: Récapitulatif](@next)";
