/* Page prose (de) */
"WhichToolWhen" = "# Welches Werkzeug wann: ein Spickzettel\n\nHalte das griffbereit. In neuem Code starte in der Spalte **Modern**; falle nur\naus einem gelisteten Grund in die Spalte **Klassisch**.\n\n* **Arbeit außerhalb des Hauptthreads ausführen.**  \nModern: `Task { }`. Klassisch: `queue.async`.\n* **Zwei oder drei unabhängige Abrufe ausführen, im Voraus bekannt.**  \nModern: `async let`. Klassisch: `DispatchGroup`.\n* **Eine variable Anzahl paralleler Jobs ausführen.**  \nModern: `TaskGroup`. Klassisch: Gruppe + Semaphor.\n* **Gemeinsam genutzten veränderlichen Zustand schützen.**  \nModern: `actor`. Klassisch: serielle Warteschlange oder Semaphor mit Zählwert 1.\n* **Die UI berühren / zum Hauptthread zurückkehren.**  \nModern: `@MainActor`. Klassisch: `DispatchQueue.main.async`.\n* **Einen Strom von Ereignissen über die Zeit behandeln.**  \nModern: `AsyncStream`. Klassisch: Delegate oder sich wiederholendes Callback.\n* **Eine bestehende Callback-API überbrücken.**  \nModern: `withCheckedContinuation`. Klassisch: *so kommst du hinüber*.\n* **Laufende Arbeit abbrechen.**  \nModern: kooperativer `Task`-Abbruch. Klassisch: `Operation.cancel()` + manuelles\n`isCancelled`.\n\n---\n\nEin Fall läuft andersherum: wenn du wirklich eine **bestimmte Warteschlange,\nQoS, Timer-Quelle oder Barrier** brauchst, ist GCD noch das richtige, direkte\nWerkzeug, und es gibt keinen modernen Ersatz, zu dem man greifen könnte.\n\n[Zurück](@previous)  |  Seite 7 von 8  |  [Weiter: Zusammenfassung](@next)";
