/* Page prose (de) */
"StructuredGuarantee" = "# Die strukturierte Garantie\n\nTask Groups sind **strukturierte Nebenläufigkeit**, und dieses Wort \"strukturiert\" trägt ein Versprechen in sich, das es wert ist, laut ausgesprochen zu werden:\n\n**Der `withTaskGroup`-Geltungsbereich kehrt erst zurück, wenn jeder Kind-Task fertig geworden oder abgebrochen worden ist.** Kein Kind kann die Gruppe überleben. Wenn die Kontrolle die schließende Klammer passiert, laufen null übrig gebliebene Aufgaben im Schatten.\n\nDeshalb musst du nie Kind-Tasks von Hand verfolgen, sie selbst abbrechen oder dir Sorgen machen, dass eines entwischt ist und noch CPU verbrennt, nachdem du weitergezogen bist. Die *Struktur* deines Codes, die Klammern der Gruppe, begrenzt die *Lebensdauer* der Arbeit. Selbst im werfenden Beispiel auf der vorigen Seite kehrte die Gruppe erst zurück, als die abgebrochenen Geschwister tatsächlich gestoppt hatten.\n\nDer Abbruch fließt genauso wie im Kapitel [Tasks und Abbruch](Tasks%20and%20Cancellation.playgroundchapter/Overview): **den Baum hinab**. Brich die Aufgabe ab, der die Gruppe gehört, und jedes Kind wird ebenfalls als abgebrochen markiert. Und ein Kind ist nur eine gewöhnliche Aufgabe, also nimmt es den Abbruch auf dieselbe Weise wahr: `Task.sleep` wirft `CancellationError`, und du kannst `Task.isCancelled` in einer langen Schleife prüfen, um frühzeitig auszusteigen.";
"StructuredGuarantee-2" = "**Sieh es laufen:** Das Abbrechen von `stack` breitet sich in die Gruppe und hinab zu allen 100 Kindern aus. Ihre `Task.sleep`-Aufrufe werfen und wickeln sich ab (hier schluckt das `try?` den Fehler und liefert `nil`, also steuern diese Einzelbilder ihren Ersatzwert bei), und die Gruppe kehrt trotzdem sauber zurück, weil die Garantie auch dann hält, wenn die Antwort \"stopp\" lautet. Nichts entwischt.\n\n[Zurück](@previous)  |  Seite 7 von 9  |  [Weiter: Begrenzen, wie viele gleichzeitig laufen](@next)";
