async/await
Kurz: async/await ist eine Schreibweise für asynchronen Code, die sich wie normaler, sequenzieller Code liest: await wartet auf das Ergebnis einer langsamen Operation, ohne den restlichen Programmablauf zu blockieren.
Genauer: Eine als async markierte Funktion gibt ein Versprechen zurück (Promise, Future, Task). Mit await hält sie an dieser Stelle an und gibt die Kontrolle ab, bis das Ergebnis da ist – andere Aufgaben laufen in der Zwischenzeit. Das ist bequemer als verschachtelte Callbacks. Unterstützt wird es in JavaScript/TypeScript, Python, C#, Kotlin (Coroutinen), Rust, Swift, Dart und weiteren.
Im Detail
async function ladeBenutzer(id) {
const antwort = await fetch(`/api/benutzer/${id}`);
if (!antwort.ok) throw new Error("Fehler " + antwort.status);
return antwort.json();
}
async function zeige() {
try {
const [a, b] = await Promise.all([ladeBenutzer(1), ladeBenutzer(2)]); // parallel
console.log(a.name, b.name);
} catch (e) {
console.error(e.message);
}
}import asyncio
async def hole(n):
await asyncio.sleep(1) # simuliert Warten auf das Netzwerk
return n * 2
async def main():
ergebnisse = await asyncio.gather(hole(1), hole(2), hole(3)) # ~1 Sekunde, nicht 3
print(ergebnisse)
asyncio.run(main())Nebenläufig, nicht parallel
async/await läuft meist auf einem Thread: Während eine Aufgabe wartet, kommt eine andere an die Reihe (kooperatives Multitasking, gesteuert von einer Event Loop). Das eignet sich hervorragend für Ein-/Ausgabe (Netzwerk, Dateien, Datenbank), aber nicht für schwere Berechnungen – die belegen den Thread und blockieren alles; dafür nimmt man Threads oder Prozesse.
Fehlerbehandlung
Fehler werden mit try/catch (Exceptions) behandelt wie in synchronem Code. Wichtig: ein vergessenes await liefert ein Versprechen statt des Ergebnisses; unbehandelte abgelehnte Versprechen sind eine häufige Fehlerquelle.
Siehe auch: Event Loop, Callback, Nebenläufigkeit, Thread