async let
Bei async let
handelt es sich um eine neue Syntax in Swift 5.5. Sie ermöglicht es, Aktionen parallel ablaufen zu lassen. Die Funktion, die einen oder mehrerer solcher async let
-Tasks erzeugt, führt alle nachfolgenden Befehle unmittelbar aus. Erst, wenn das Ergebnis einer async let
-Operation tatsächlich benötigt wird, wartet die Funktion auf jenes Ergebnis.
Um den Einsatz von async let
zu erläutern, dient das nachfolgende Listing als Grundlage. Es stellt eine Funktion downloadPhotos()
dar, über die drei Bilder über eine weitere Funktion namens downloadPhoto(_:)
heruntergeladen werden.
func downloadPhotos() async -> [Photo] {
let firstPhoto = await downloadPhoto("First")
let secondPhoto = await downloadPhoto("Second")
let thirdPhoto = await downloadPhoto("Third")
return [firstPhoto, secondPhoto, thirdPhoto]
}
Diese Implementierung der downloadPhotos()
-Funktion sorgt dafür, dass jedes der drei Bilder nacheinander heruntergeladen wird. Erst nach erfolgreichem Download des ersten Bildes beginnt der Download des zweiten, und so weiter.
Mithilfe von async let
kann man die drei Bilder-Downloads auch parallel ablaufen lassen. Zu diesem Zweck deklariert man die drei Konstanten firstPhoto
, secondPhoto
und thirdPhoto
zusätzlich mit dem Schlüsselwort async
func downloadPhotos() async -> [Photo] {
async let firstPhoto = downloadPhoto("First")
async let secondPhoto = downloadPhoto("Second")
async let thirdPhoto = downloadPhoto("Third")
return [await firstPhoto, await secondPhoto, await thirdPhoto]
}
Technisch gesehen läuft die downloadPhotos()
-Funktion nun unbekümmert weiter, nachdem der Download des ersten Bildes angestoßen wurde. So startet die Funktion direkt parallel auch den Download der anderen zwei Bilder.
Entscheidend ist dann der Code des return
-Befehls. An dieser Stelle werden alle drei Bilder benötigt, da sie als Ergebnis der Funktion zurückgeliefert werden sollen. Entsprechend müssen die drei Konstanten firstPhoto
, secondPhoto
und thirdPhoto
beim Aufruf zusätzlich mit dem Schlüsselwort await
versehen werden. Das teilt der Funktion mit, dass sie an dieser Stelle auf die Fertigstellung der parallel ablaufenden Downloads warten muss.
Fazit
async let
stellt eine einfache und komfortable Möglichkeit dar, um in Swift 5.5 mehrere Tasks parallel ablaufen zu lassen. Erst, wenn die zugehörige Funktion zwingend auf das Ergebnis einer parallelen Aktion angewiesen ist, wartet die Funktion so lange mit der weiteren Ausführung, bis jenes Ergebnis vorliegt.
Euer Thomas
Schreibe einen Kommentar