Dart-Programmierung - Async

Ein asynchronous operation wird in einem Thread ausgeführt, der von dem getrennt ist mainAnwendungsthread. Wenn eine Anwendung eine Methode aufruft, um eine Operation asynchron auszuführen, kann die Anwendung die Ausführung fortsetzen, während die asynchrone Methode ihre Aufgabe ausführt.

Beispiel

Nehmen wir ein Beispiel, um dieses Konzept zu verstehen. Hier akzeptiert das Programm Benutzereingaben mit demIO library.

import 'dart:io'; 
void main() { 
   print("Enter your name :");            
   
   // prompt for user input 
   String name = stdin.readLineSync();  
   
   // this is a synchronous method that reads user input 
   print("Hello Mr. ${name}"); 
   print("End of main"); 
}

Das readLineSync()ist eine synchrone Methode. Dies bedeutet, dass die Ausführung aller Anweisungen, die dem folgenreadLineSync() Funktionsaufruf wird bis zum gesperrt readLineSync() Methode beendet die Ausführung.

Das stdin.readLineSyncwartet auf Eingabe. Es stoppt in seinen Spuren und wird nicht weiter ausgeführt, bis es die Eingabe des Benutzers erhält.

Das obige Beispiel führt zu Folgendem output - -

Enter your name :     
Tom                   

// reads user input  
Hello Mr. Tom 
End of main

Beim Rechnen sagen wir, dass etwas ist synchronouswenn es darauf wartet, dass ein Ereignis eintritt, bevor es fortfährt. Ein Nachteil bei diesem Ansatz besteht darin, dass die Ausführung der nachfolgenden Blöcke blockiert wird, obwohl sie nicht miteinander verbunden sind, wenn die Ausführung eines Teils des Codes zu lange dauert. Stellen Sie sich einen Webserver vor, der auf mehrere Anforderungen für eine Ressource antworten muss.

Ein synchrones Ausführungsmodell blockiert die Anforderung jedes anderen Benutzers, bis die Verarbeitung der aktuellen Anforderung abgeschlossen ist. In einem solchen Fall, wie bei einem Webserver, muss jede Anforderung unabhängig von den anderen sein. Dies bedeutet, dass der Webserver nicht warten sollte, bis die aktuelle Anforderung ausgeführt wurde, bevor er auf Anforderungen anderer Benutzer reagiert.

Einfach ausgedrückt, sollte es Anfragen von neuen Benutzern annehmen, bevor die Anfragen früherer Benutzer unbedingt abgeschlossen werden müssen. Dies wird als asynchron bezeichnet. Asynchrone Programmierung bedeutet grundsätzlich kein wartendes oder nicht blockierendes Programmiermodell. Dasdart:async Das Paket erleichtert die Implementierung asynchroner Programmierblöcke in einem Dart-Skript.

Beispiel

Das folgende Beispiel veranschaulicht die Funktionsweise eines asynchronen Blocks besser.

Step 1 - Erstellen Sie eine contact.txt Datei wie unten angegeben and Speichern Sie es im Datenordner des aktuellen Projekts.

1, Tom 
2, John 
3, Tim 
4, Jane

Step 2 - Schreiben Sie ein Programm, das die Datei liest, ohne andere Teile der Anwendung zu blockieren.

import "dart:async"; 
import "dart:io";  

void main(){ 
   File file = new File( Directory.current.path+"\\data\\contact.txt"); 
   Future<String> f = file.readAsString();  
  
   // returns a futrue, this is Async method 
   f.then((data)=>print(data));  
   
   // once file is read , call back method is invoked  
   print("End of main");  
   // this get printed first, showing fileReading is non blocking or async 
}

Das output dieses Programms wird wie folgt sein -

End of main 
1, Tom 
2, John 
3, Tim 
4, Jan

Das "Ende von main" wird zuerst ausgeführt, während das Skript die Datei weiter liest. DasFuture Klasse, Teil von dart:asyncwird verwendet, um das Ergebnis einer Berechnung abzurufen, nachdem eine asynchrone Aufgabe abgeschlossen wurde. DiesFuture value wird dann verwendet, um nach Abschluss der Berechnung etwas zu tun.

Sobald der Lesevorgang abgeschlossen ist, wird die Ausführungssteuerung innerhalb übertragen "then()". Dies liegt daran, dass der Lesevorgang mehr Zeit in Anspruch nehmen kann und daher keinen anderen Teil des Programms blockieren möchte.

Dart Zukunft

Die Dart-Community definiert a Futureals "Mittel, um irgendwann in der Zukunft einen Wert zu erhalten." Einfach gesagt,Future objectssind ein Mechanismus zur Darstellung von Werten, die von einem Ausdruck zurückgegeben werden, dessen Ausführung zu einem späteren Zeitpunkt abgeschlossen sein wird. Mehrere von Darts eingebauten Klassen geben a zurückFuture wenn eine asynchrone Methode aufgerufen wird.

Dart ist eine Single-Threaded-Programmiersprache. Wenn ein Code den Ausführungsthread blockiert (z. B. durch Warten auf eine zeitaufwändige Operation oder Blockieren der E / A), friert das Programm effektiv ein.

Durch asynchrone Vorgänge kann Ihr Programm ausgeführt werden, ohne blockiert zu werden. Dart benutztFuture objects um asynchrone Operationen darzustellen.