/* Page prose (de) */
"Overview" = "# Continuations\n\nInzwischen fühlt sich `await` natürlich an, aber der meiste Code da draußen spricht es nicht. Die klassischen Completion Handler aus früheren Kapiteln, jeder `DispatchQueue`-Sprung, jede Delegate-Methode, die \"später\" feuert (und unzählige System- und SDK-APIs, denen du in echten Projekten begegnest) sind **Callback**-APIs, keine asynchronen. Du kannst nicht einfach `await` über `fetchThing { ... }` streuen und hoffen. Eine **Continuation** ist der offizielle Adapter: Sie lässt dich eine dieser alten Callback-APIs umhüllen, damit die Außenwelt sie mit einem sauberen `await` aufrufen kann. In diesem Kapitel geht es darum, wie du diesen Adapter von Hand baust.\n\n---\n\n## Was du lernst\n\n* Was eine **Continuation** ist und warum sie die Brücke von Callbacks zu `await` bildet.\n* `withCheckedContinuation`: eine async-Funktion aussetzen, eine Callback-API ausführen und **fortsetzen**, wenn der Callback feuert.\n* `withCheckedThrowingContinuation` für APIs, die fehlschlagen können, die sowohl die `Result`- als auch die klassische `(value, error)`-Form umhüllt.\n* Die eine Regel, die du niemals brechen darfst: **genau einmal fortsetzen**, und wie \"checked\" Continuations dich auffangen, wenn du ausrutschst.\n* Wie du einen einmaligen Callback im **Delegate**-Stil in einen einzigen async-Aufruf überbrückst.\n\n---\n\n## Die Brücke, die du brauchst\n\nHier ist das Missverhältnis. Eine async-Funktion arbeitet sich von oben nach unten vor und **setzt aus** bei jedem `await`, wobei sie den Thread zurückgibt, bis ihr Ergebnis bereit ist. Eine Callback-API gibt überhaupt kein Ergebnis zurück: Sie reicht dir eine Closure und ruft sie **später** auf, von wo auch immer sie fertig geworden ist. Zwei verschiedene Welten.\n\nEine **Continuation** ist ein Wert, der \"den Rest der ausgesetzten async-Funktion, die darauf wartet, ein Ergebnis überreicht zu bekommen\" repräsentiert. Du bekommst eine, verwahrst sie, rufst deine alte Callback-API auf, und wenn der Callback feuert, **setzt** du die Continuation mit dem Wert **fort**. Dieses Fortsetzen ist es, was die async-Funktion wieder aufweckt.\n\nDie Form ist immer dieselbe:\n\n```swift\nfunc modernVersion() async -> Result {\n    await withCheckedContinuation { continuation in\n        oldCallbackAPI { value in                   // the callback fires later...\n            continuation.resume(returning: value)   // ...and wakes us up\n        }\n    }\n}\n```\n\nDer Aufruf `await withCheckedContinuation { ... }` **setzt** genau dort **aus**. Er kehrt nicht zurück, bis *jemand* `continuation.resume(...)` aufruft. Die Closure, die du übergibst, läuft sofort (dort stößt du die alte API an), aber das `await` selbst parkt, bis das Fortsetzen eintrifft.\n\nAuf der nächsten Seite bauen wir eine echte und sehen sie aussetzen und fortsetzen.\n\nSeite 1 von 8  |  [Weiter: Aussetzen, dann fortsetzen](@next)";
