0Pricing
Learn Rust Coding · Lección

Introducción a Async/Await

Aprenda los fundamentos de las funciones `async` y las expresiones `await` para escribir código asíncrono y no bloqueante.

Introducción a Async/Await es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 3 lecciones en total.

¿Por qué la programación asíncrona?

En programación, las tareas suelen implicar esperas. Puede tratarse de esperar a que se cargue un archivo, a que termine una solicitud de red o a que una consulta a la base de datos devuelva resultados.

Tradicionalmente, los programas se bloquean durante estas esperas, es decir, pausan todas las demás operaciones hasta que termina la tarea. Esto puede hacer que las aplicaciones sean lentas y no respondan.

Cuando el código espera...

Considere este sencillo ejemplo de una operación bloqueante. El programa se pausará durante 2 segundos antes de imprimir el segundo mensaje.

Intente ejecutarlo:

use std::thread;
use std::time::Duration;

fn main() {
  println!("Starting a blocking task...");
  thread::sleep(Duration::from_secs(2)); // This blocks!
  println!("Blocking task finished!");
}

El coste de esperar

En el ejemplo anterior, esperó todo el programa. Si se tratara de un servidor web, significaría que, mientras la solicitud de un usuario espera a la base de datos, ¡no se podría atender a ningún otro usuario!

La programación asíncrona permite que el programa inicie una tarea de larga duración y continúe con otro trabajo en lugar de esperar. Cuando la tarea larga esté lista, el programa podrá retomarla.

El enfoque asíncrono de Rust

Rust proporciona potentes características del lenguaje para la programación asíncrona: las palabras clave async y await.

  • Las funciones async son funciones especiales que se pueden pausar y reanudar.
  • .await se utiliza dentro de una función async para esperar a que termine otra tarea asíncrona sin bloquear todo el programa.

Definición de funciones `async`

Declare una función asíncrona añadiendo la palabra clave async delante de fn. Una función async siempre devuelve un Future.

Un Future es un valor que quizá aún no esté listo. Representa un cálculo que finalmente producirá un resultado.

async fn my_async_task() -> u32 {
  // This task will eventually return 42
  42
}

Pausar con `.await`

La palabra clave .await es la que hace que la programación asíncrona no sea bloqueante. Cuando aplica .await a un Future, su función async:

  • pausa su propia ejecución;
  • permite que el programa realice otro trabajo;
  • se reanuda cuando el Future esperado está listo.

Es como pulsar el botón de pausa de la tarea actual mientras termina otra tarea.

Ejecución de código asíncrono: ejecutores

Una función async devuelve un Future, pero no ejecuta inmediatamente el código que contiene. Los Futures son perezosos.

Para ejecutar realmente una función async y su Future, necesita un executor. En ejemplos sencillos, puede usar futures::executor::block_on, que ejecuta un Future hasta completarlo en el hilo actual.

Su primer programa con `async`/`await`

Así es como funcionan conjuntamente async, await y un ejecutor sencillo. Observe cómo se utiliza block_on en main para iniciar el proceso asíncrono.

Este ejemplo simula un retraso asíncrono sin bloquear el hilo de la función main (conceptualmente; block_on sí bloquea hasta que termina el future, pero la propia tarea asíncrona cede el control).

use futures::executor::block_on;
use std::time::Duration;

async fn learn_and_wait() {
  println!("Learning asynchronously...");
  // Simulate an async operation that takes time
  // In a real app, this would be an I/O op
  tokio::time::sleep(Duration::from_secs(1)).await;
  println!("Finished learning!");
}

fn main() {
  println!("Starting main function.");
  block_on(learn_and_wait());
  println!("Main function finished.");
}

Comprender el trait `Future`

Cuando escribe async fn my_func(), Rust lo transforma internamente en una máquina de estados que implementa el trait Future.

El trait Future tiene un método principal, poll, al que un ejecutor llama repetidamente para comprobar si la tarea está lista para avanzar. Cuando se aplica .await a un Future, este indica al ejecutor que sondee otro Future hasta que termine.

Comprobación rápida: conceptos básicos de Async/Await

Ha aprendido los conceptos básicos de async y await. Veamos si puede identificar sus funciones principales.

Repaso y próximos pasos

¡Excelente trabajo! Ha dado sus primeros pasos en la programación asíncrona con Rust.

  • Hemos visto que el código síncrono se bloquea y hace que los programas esperen.
  • El código asíncrono permite que las tareas se ejecuten de forma concurrente sin bloquearse.
  • La palabra clave async declara una función asíncrona, que devuelve un Future.
  • La palabra clave .await pausa una función async hasta que un Future está listo.
  • Se necesita un executor (como block_on) para ejecutar Futures.

A continuación, profundizaremos en Tokio, un potente runtime y ecosistema para crear aplicaciones asíncronas reales en Rust.

Preguntas frecuentes

¿La lección «Introducción a Async/Await» es gratis?

Sí — el texto completo de «Introducción a Async/Await» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 3 lecciones en total.

¿Qué aprenderé en «Introducción a Async/Await»?

Aprenda los fundamentos de las funciones `async` y las expresiones `await` para escribir código asíncrono y no bloqueante. Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Learn Rust Coding?

No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.

¿Cuánto tiempo toma la lección «Introducción a Async/Await»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?

Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Introducción a Async/Await
  2. Construcción de aplicaciones asíncronas con Tokio
  3. Trabajo con Futures y tareas
← Volver a Learn Rust Coding