/* Page prose (de) */
"AsyncSeqWrappingUp" = "# Zusammenfassung\n\nEine async Sequenz ist das Werkzeug für Werte, die *im Lauf der Zeit* eintreffen, konsumiert mit einer `for await`-Schleife, die sich zwischen ihnen aussetzt, statt zu blockieren. Die wiederkehrende Gefahr ist ein Stream, der nie endet oder nie hinter sich aufräumt. Behalte die Lebenszyklus-Punkte unten im Blick, und Streams verhalten sich brav.\n\n* Eine **async Sequenz** liefert Werte *im Lauf der Zeit*; iteriere sie mit `for await` innerhalb einer `Task`, die sich zwischen Elementen aussetzt, statt zu blockieren. Bei einem simplen Array ist eine normale `for`-Schleife korrekt und klarer.\n* **`AsyncStream`** verwandelt eine Callback-/Timer-/Event-Quelle in eine async Sequenz: `continuation.yield(_:)` sendet, `continuation.finish()` beendet sie, und Stolperfalle: ohne dieses `finish()` (oder einen Fehler oder einen Abbruch) stoppt die Schleife des Konsumenten nie.\n* **`onTermination`** läuft einmal, wenn der Stream endet, normal oder vorzeitig, also ist es dort, wo du Timer abbrichst und Ressourcen freigibst; überspring es, und ein erzeugender Prozess im Hintergrund leckt.\n* **Das Abbrechen der konsumierenden Aufgabe** (oder ein `break`) stoppt den Konsum an der nächsten Suspendierung; das Warten auf den nächsten Wert *ist* die Abbruchprüfung.\n* **`AsyncThrowingStream`** fügt das Fehlschlagen hinzu: beende mit `finish(throwing:)` und konsumiere mit `for try await` innerhalb von `do-try-catch`.\n* Das ist der moderne Ersatz für die Muster mit wiederholten Delegates und mehrfachen Callbacks.\n\n---\n\n## Als Nächstes\n\n**[Continuations](Continuations.playgroundchapter/Overview)**: wie du eine *einzelne* Callback-API im alten Stil in ein sauberes `await` überbrückst, das fehlende Stück neben `AsyncStream`.\n\n[Zurück](@previous)  |  Seite 7 von 7";
