Programmation Dart - Async

Un asynchronous operation s'exécute dans un thread, séparé du mainfil de l'application. Lorsqu'une application appelle une méthode pour effectuer une opération de manière asynchrone, l'application peut continuer à s'exécuter pendant que la méthode asynchrone exécute sa tâche.

Exemple

Prenons un exemple pour comprendre ce concept. Ici, le programme accepte les entrées de l'utilisateur à l'aide duIO 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"); 
}

le readLineSync()est une méthode synchrone. Cela signifie que l'exécution de toutes les instructions qui suivent lereadLineSync() l'appel de fonction sera bloqué jusqu'à ce que readLineSync() la méthode termine l'exécution.

le stdin.readLineSyncattend l'entrée. Il s'arrête sur ses traces et ne s'exécute plus tant qu'il n'a pas reçu l'entrée de l'utilisateur.

L'exemple ci-dessus aboutira à ce qui suit output -

Enter your name :     
Tom                   

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

En informatique, nous disons que quelque chose est synchronouslorsqu'il attend qu'un événement se produise avant de continuer. Un inconvénient de cette approche est que si une partie du code prend trop de temps à s'exécuter, les blocs suivants, bien que non liés, ne pourront pas s'exécuter. Considérez un serveur Web qui doit répondre à plusieurs demandes pour une ressource.

Un modèle d'exécution synchrone bloquera la demande de tous les autres utilisateurs jusqu'à ce qu'il termine le traitement de la demande en cours. Dans un tel cas, comme celui d'un serveur web, chaque requête doit être indépendante des autres. Cela signifie que le serveur Web ne doit pas attendre la fin de l'exécution de la demande en cours avant de répondre à la demande des autres utilisateurs.

En termes simples, il devrait accepter les demandes des nouveaux utilisateurs avant de nécessairement compléter les demandes des utilisateurs précédents. Ceci est appelé asynchrone. La programmation asynchrone signifie essentiellement pas de modèle de programmation en attente ou non bloquant. ledart:async package facilite l'implémentation de blocs de programmation asynchrones dans un script Dart.

Exemple

L'exemple suivant illustre mieux le fonctionnement d'un bloc asynchrone.

Step 1 - Créer un contact.txt fichier comme indiqué ci-dessous and enregistrez-le dans le dossier de données du projet en cours.

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

Step 2 - Ecrire un programme qui lira le fichier sans bloquer les autres parties de l'application.

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 
}

le output de ce programme sera comme suit -

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

La "fin de main" s'exécute en premier tandis que le script continue la lecture du fichier. leFuture classe, partie de dart:async, est utilisé pour obtenir le résultat d'un calcul après la fin d'une tâche asynchrone. CeFuture value est ensuite utilisée pour faire quelque chose une fois le calcul terminé.

Une fois l'opération de lecture terminée, le contrôle d'exécution est transféré dans "then()". En effet, l'opération de lecture peut prendre plus de temps et ne veut donc pas bloquer une autre partie du programme.

Dart Future

La communauté Dart définit un Futurecomme "un moyen d'obtenir une valeur dans le futur". Tout simplement,Future objectssont un mécanisme pour représenter les valeurs renvoyées par une expression dont l'exécution se terminera plus tard. Plusieurs classes intégrées de Dart renvoient unFuture lorsqu'une méthode asynchrone est appelée.

Dart est un langage de programmation à un seul thread. Si un code bloque le thread d'exécution (par exemple, en attendant une opération qui prend du temps ou en bloquant les E / S), le programme se fige effectivement.

Les opérations asynchrones permettent à votre programme de s'exécuter sans être bloqué. Dart utiliseFuture objects pour représenter des opérations asynchrones.