Flutter -- ohne Dart geht es nicht Futures Async

Async - das unbekannte Wesen

Im letzten Post haben wir mit dem Thema Futures begonnen. Zeit weiter zu machen !

Parallel oder gleichzeitig ?


Wenn Dart ein Programm ausführt, geschieht das in einem Thread (Prozess). Der Code wird Zeile für Zeile abgearbeitet, bis das Programm endet. Wenn wir in unserem Code asynchrone Funktionen benutzen, wird dieser innerhalb dieses einten Prozesses ausgeführt. D.h. unser Code wird unterteilt und im Wechsel ausgeführt. Das Resultat ist praktisch eine gleichzeitige Abarbeitung von synchronem und asynchronem Code. Eine parallele Abarbeitung wäre eine gleichzeitige, aber unabhängige Abarbeitung des Codes. Das ganze Thema geht tiefer und steht im Zusammenhang mit Microtasks, Isolates und dem Event Queue.  Ich gehe hier nicht weiter darauf ein. Das würde den Rahmen dieses Posts sprengen.

Ein einfacher Start


Beginnen wir mit ein paar Zeilen Code:

Drei Printfunktionen, die zweite mit einer Schleife, die eine Verzögerung in den Code einbaut. Wenn man den Code ausführt, werden die Funktionen in der programmierten Reihenfolge ausgeführt. Was aber, wenn wir möchten, das die einzelnen Funktionen so schnell als möglich ausgeführt werden ? Statt des Codes für die Verzögerung, könnten wir hier auch eine große Datei einlesen, oder ähnliches ? In so einem Fall kommt das async Schlüsselwort zum Zuge. Async tritt dabei immer mit await auf und einem Return Wert vom Typ Future. Da in unserem Code die Printfunktion keinen eigentlichen Wert zurückgibt, den wir verwenden wollen, ist die Funktion vom Typ Future<void>.  Hier der angepasste Code:


Wenn wir den Code anschauen, sehen wir, das die Verzögerungsschleife in eine await Funktion gepackt wurde. Aber auch folgendes Codekonstrukt ist zulässig:

var Ergebnis = await meineBerechnungsFunktion()

Eine Standart Konstruktion ist also:

Future<void> meine Funktion() async {...

var meineVariable = await aufDiesesErgebnisWartenFunktion();

...}

Dabei ist wichtig zu wissen, das bis das Schlüsselwort await erscheint, der Code synchron verarbeitet wird. Wenn wir zum Beispiel vor await noch eine Printausgabe (Test) einfügen, sieht das Ergebnis so aus:


So das war es für diesen Post. Demnächst: Wie behandeln wir Fehler im Zusammenhang mit Futures.

Kommentare

Beliebte Posts aus diesem Blog

Flutter -- ohne Dart geht es nicht 2 -- einfache Variablen Typen

Material Design in Flutter Teil 2

Dart Final Const