Programación de dardos - Async

Un asynchronous operation se ejecuta en un hilo, separado del mainhilo de aplicación. Cuando una aplicación llama a un método para realizar una operación de forma asincrónica, la aplicación puede continuar ejecutándose mientras el método asincrónico realiza su tarea.

Ejemplo

Tomemos un ejemplo para entender este concepto. Aquí, el programa acepta la entrada del usuario usando elIO 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"); 
}

los readLineSync()es un método sincrónico. Esto significa que la ejecución de todas las instrucciones que siguen alreadLineSync() La llamada a la función se bloqueará hasta que readLineSync() el método termina la ejecución.

los stdin.readLineSyncespera entrada. Se detiene en seco y no se ejecuta más hasta que recibe la entrada del usuario.

El ejemplo anterior dará como resultado lo siguiente output -

Enter your name :     
Tom                   

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

En informática, decimos que algo es synchronouscuando espera que suceda un evento antes de continuar. Una desventaja de este enfoque es que si una parte del código tarda demasiado en ejecutarse, los bloques subsiguientes, aunque no estén relacionados, no podrán ejecutarse. Considere un servidor web que debe responder a múltiples solicitudes de un recurso.

Un modelo de ejecución síncrona bloqueará la solicitud de todos los demás usuarios hasta que termine de procesar la solicitud actual. En tal caso, como el de un servidor web, cada solicitud debe ser independiente de las demás. Esto significa que el servidor web no debe esperar a que la solicitud actual termine de ejecutarse antes de responder a la solicitud de otros usuarios.

En pocas palabras, debería aceptar solicitudes de nuevos usuarios antes de completar necesariamente las solicitudes de usuarios anteriores. Esto se denomina asincrónico. La programación asincrónica básicamente significa que no hay modelos de programación en espera o sin bloqueo. losdart:async El paquete facilita la implementación de bloques de programación asincrónicos en un script de Dart.

Ejemplo

El siguiente ejemplo ilustra mejor el funcionamiento de un bloque asincrónico.

Step 1 - Crea un contact.txt archivo como se indica a continuación and guárdelo en la carpeta de datos del proyecto actual.

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

Step 2 - Escriba un programa que lea el archivo sin bloquear otras partes de la aplicación.

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 
}

los output de este programa será el siguiente:

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

El "final de main" se ejecuta primero mientras el script continúa leyendo el archivo. losFuture clase, parte de dart:async, se utiliza para obtener el resultado de un cálculo después de que se haya completado una tarea asincrónica. EstaFuture El valor se usa para hacer algo después de que finaliza el cálculo.

Una vez que se completa la operación de lectura, el control de ejecución se transfiere dentro "then()". Esto se debe a que la operación de lectura puede llevar más tiempo y, por lo tanto, no quiere bloquear otra parte del programa.

Dardo futuro

La comunidad de Dart define un Futurecomo "un medio para obtener un valor en el futuro". Simplemente pon,Future objectsson un mecanismo para representar valores devueltos por una expresión cuya ejecución se completará en un momento posterior. Varias de las clases integradas de Dart devuelven unFuture cuando se llama a un método asincrónico.

Dart es un lenguaje de programación de un solo subproceso. Si algún código bloquea el subproceso de ejecución (por ejemplo, al esperar una operación que requiere mucho tiempo o al bloquear la E / S), el programa se congela efectivamente.

Las operaciones asincrónicas permiten que su programa se ejecute sin bloquearse. Usos de dardosFuture objects para representar operaciones asincrónicas.