/* Page prose (de) */
"ClassicBugUnbalancedEnterLeave" = "# Der klassische Fehler: unausgeglichenes `enter`/`leave`\n\nEine Dispatch Group ist nur so korrekt wie deine Buchführung. Die Regel ist absolut: **genau ein `leave()` für jedes `enter()`, auf jedem Pfad.** Brich sie in eine der beiden Richtungen und du bekommst einen jeweils anderen Fehler.\n\nZu wenige `leave()` und die Gruppe hängt. Verpasse ein `leave()` auf irgendeinem Code-Pfad und der Zähler kehrt nie zu null zurück. `notify` löst nie aus; `wait()` wartet für immer.";
"ClassicBugUnbalancedEnterLeave-2" = "Die Namen oben sind nicht leer, also funktioniert es zufällig, aber die Form ist die Gefahr.\n\n* callout(Probier es aus): Füge dem Array einen leeren String `\"\"` hinzu und führe es erneut aus. Dieser leere Name trifft auf das `guard` und kehrt zurück, *ohne* `leave()` aufzurufen, also kommt der Zähler der Gruppe nie zu null zurück. Das Ergebnis: Die drei echten Getränke werden ausgegeben, aber `This may never print…` nie, und die Seite läuft weiter, bis du sie selbst stoppst. Dieses stille Hängen, ohne Absturz und ohne Fehler, nur ein \"Alles fertig\", das nie ankommt, ist der ganze Fehler.\n\n> In dem Moment, in dem ein `guard`, ein `throw` oder ein Fehlerzweig vor `leave()` zurückkehrt, verlässt diese Aufgabe die Gruppe nie, und dein \"Alles fertig\"-Callback läuft stillschweigend nie. **Ein `defer { group.leave() }` direkt nach `enter()` garantiert das leave auf jedem Ausgangspfad** und ist die Standardlösung.\n\nZu viele `leave()` verursachen einen Absturz. Rufe `leave()` öfter auf, als du `enter()` aufgerufen hast, und der Zähler der Gruppe wird negativ, was zur Laufzeit mit einem Fehler wie *\"Unbalanced call to dispatch_group_leave.\"* abbricht. Das kommt meist daher, dass `enter()` an der falschen Stelle steht: zum Beispiel, wenn du es einmal *außerhalb* der Schleife aufrufst, aber `leave()` *innerhalb* jeder Iteration. Der Zähler erreicht nach der ersten Aufgabe null, `notify` **löst zu früh aus**, während andere Aufgaben noch laufen, und die überzähligen leaves stürzen dann ab. Halte `enter()` und `leave()` auf derselben Ebene gepaart.\n\n[Zurück](@previous)  |  Seite 5 von 8  |  [Weiter: DispatchSemaphore: begrenzen, wie viele gleichzeitig laufen](@next)";
