La programación asíncrona es una técnica que permite que un programa continúe ejecutándose mientras espera que se completen operaciones de larga duración, como la lectura de archivos, la consulta de bases de datos o las solicitudes de red. En Dart, la programación asíncrona se maneja principalmente mediante Future
y async
/await
.
Conceptos Clave
Future
Un Future
representa un valor o error que estará disponible en algún momento en el futuro. Es una promesa de que se proporcionará un valor o se lanzará un error.
async y await
Las palabras clave async
y await
se utilizan para trabajar con Future
de una manera más legible y manejable. async
se usa para marcar una función como asíncrona, y await
se usa para esperar la finalización de un Future
.
Ejemplo Práctico
Ejemplo 1: Uso de Future
void main() { print('Inicio del programa'); Future.delayed(Duration(seconds: 2), () { print('Operación asíncrona completada'); }); print('Fin del programa'); }
Explicación:
print('Inicio del programa');
se ejecuta inmediatamente.Future.delayed(Duration(seconds: 2), () { ... });
programa una operación que se ejecutará después de 2 segundos.print('Fin del programa');
se ejecuta inmediatamente después de programar la operación asíncrona.- Después de 2 segundos, se ejecuta la operación asíncrona y se imprime
Operación asíncrona completada
.
Ejemplo 2: Uso de async y await
void main() async { print('Inicio del programa'); await Future.delayed(Duration(seconds: 2), () { print('Operación asíncrona completada'); }); print('Fin del programa'); }
Explicación:
print('Inicio del programa');
se ejecuta inmediatamente.await Future.delayed(Duration(seconds: 2), () { ... });
espera a que se complete la operación asíncrona antes de continuar.- Después de 2 segundos, se ejecuta la operación asíncrona y se imprime
Operación asíncrona completada
. print('Fin del programa');
se ejecuta después de que la operación asíncrona se haya completado.
Ejercicios Prácticos
Ejercicio 1: Simulación de una Solicitud de Red
Instrucciones:
- Simula una solicitud de red que tarda 3 segundos en completarse.
- Imprime un mensaje antes y después de la solicitud.
Código Inicial:
void main() async { // Imprime "Inicio de la solicitud" // Simula una solicitud de red con Future.delayed // Imprime "Solicitud completada" }
Solución:
void main() async { print('Inicio de la solicitud'); await Future.delayed(Duration(seconds: 3), () { print('Solicitud completada'); }); print('Fin del programa'); }
Ejercicio 2: Manejo de Errores en Operaciones Asíncronas
Instrucciones:
- Simula una operación asíncrona que lanza un error después de 2 segundos.
- Maneja el error usando
try-catch
.
Código Inicial:
void main() async { // Simula una operación asíncrona que lanza un error // Maneja el error usando try-catch }
Solución:
void main() async { try { await Future.delayed(Duration(seconds: 2), () { throw Exception('Ocurrió un error'); }); } catch (e) { print('Error: $e'); } print('Fin del programa'); }
Resumen
En esta sección, hemos aprendido los conceptos básicos de la programación asíncrona en Dart, incluyendo el uso de Future
, async
y await
. También hemos visto ejemplos prácticos y realizado ejercicios para reforzar estos conceptos. La programación asíncrona es esencial para manejar operaciones de larga duración sin bloquear la ejecución del programa, y es una habilidad crucial para cualquier desarrollador de Dart.
En el próximo tema, exploraremos los Streams
, que son una forma de manejar flujos de datos asíncronos en Dart.
Curso de Programación en Dart
Módulo 1: Introducción a Dart
- Introducción a Dart
- Configuración del Entorno de Desarrollo
- Tu Primer Programa en Dart
- Sintaxis y Estructura Básica