/* Page prose (de) */
"WhenAStreamCanFail" = "# Wann ein Stream fehlschlagen kann: AsyncThrowingStream\n\nEchte Sensoren trennen die Verbindung. Ein Stream, der *fehlschlagen* kann (nicht nur enden), ist ein **`AsyncThrowingStream`**. Er funktioniert genau wie `AsyncStream`, mit zwei Unterschieden: du kannst ihn mit einem Fehler beenden, und der Konsument iteriert mit `for try await` innerhalb eines `do-try-catch`.";
"WhenAStreamCanFail-2" = "**Sieh es laufen:** zwei Messwerte werden ausgegeben, dann beendet `finish(throwing:)` den Stream *mit* einem Fehler. Dieser Fehler wird aus der Schleife geworfen, überspringt `Finished cleanly` und landet im `catch`, wobei `Stream failed: disconnected` ausgegeben wird. Das `try` in `for try await` ist es, das diesem Fehler einen Ort gibt, wohin er gehen kann; lass es weg, und der Compiler erinnert dich daran.\n\n* callout(Probier es aus): Tausche `finish(throwing: SensorFault.disconnected)` gegen ein simples `finish()`. Die Schleife fällt nun durch bis `Finished cleanly` und `catch` läuft nie. Enden und Fehlschlagen sind zwei verschiedene Ausgänge.\n\nGreif zu `AsyncThrowingStream`, wenn die Quelle echt einen Fehler auslösen kann. Wenn sie immer nur *enden* kann, hält ein simples `AsyncStream` den Konsumenten einfacher: kein `do-try-catch` nötig.\n\n* callout(Das größere Bild): `AsyncStream` ist die moderne Antwort auf die alten \"hier ist noch ein Wert\"-Muster: Delegate-Methoden, die wiederholt feuern, `NotificationCenter`-Beobachter, Completion Handler, die mehr als einmal aufgerufen werden. Statt diese Logik über Callback-Methoden zu verstreuen, umhüllst du die Quelle einmal und lässt jeden sie mit einer simplen `for await`-Schleife konsumieren. Einen *einzelnen* Callback in `await` zu überbrücken ist die Aufgabe des nächsten Kapitels: Continuations.\n\n[Zurück](@previous)  |  Seite 6 von 7  |  [Weiter: Zusammenfassung](@next)";
