CSharp

Tutorial CSharp: Uso de async y await

CSharp async await: manejo asincrónico. Aprende a manejar asincronía en CSharp utilizando async y await con ejemplos detallados.

Aprende CSharp y certifícate

async y await son palabras clave en C# que permiten a los desarrolladores escribir código asincrónico de manera más sencilla. Este código asincrónico es útil cuando se están realizando operaciones que pueden tardar un tiempo en completarse, como las solicitudes de red, las operaciones de disco o cualquier otro tipo de E/S (entrada/salida). En lugar de bloquear la ejecución hasta que se complete la operación (lo que se conoce como operación síncrona), el uso de async y await permite que esas operaciones se realicen en segundo plano, permitiendo a la ejecución principal continuar con otras tareas. Esto puede ayudar a mejorar la eficiencia y la capacidad de respuesta de una aplicación.

A continuación, se presentan algunos conceptos clave sobre async y await:

  • async: Es un modificador que se aplica a un método para indicar que puede tener operaciones asincrónicas. Los métodos marcados con async siempre devolverán un Task o Task<T> (para métodos con un valor de retorno). Importante: un método async por sí solo no hace nada de forma asincrónica. Simplemente permite el uso de la palabra clave await dentro de él.

  • await: Es un operador que se utiliza para suspender la ejecución de un método async hasta que la tarea asincrónica en la que se usa await se complete. En esencia, await indica: "Espera aquí hasta que esta operación asincrónica esté terminada, luego continúa con el código que sigue". Importante: await solo puede usarse en un método que esté marcado con async.

Un ejemplo sencillo:

using System.Threading.Tasks;

public async void LlamarMetodoAsync()
{
    Console.WriteLine("Inicio del método async.");
    await MetodoAsincrono();
    Console.WriteLine("Final del método async.");
}

public async Task MetodoAsincrono()
{
    Console.WriteLine("Inicio del método asincrónico.");
    await Task.Delay(1000);  // Simula una pausa en la ejecución durante 1 segundo
    Console.WriteLine("Final del método asincrónico.");
}

LlamarMetodoAsync();

// Imprimirá, en orden:

// Inicio del método async.
// Inicio del método asincrónico.
// Final del método asincrónico.
// Final del método async.

En este caso, cuando se llama a LlamarMetodoAsync, la ejecución procede como sigue:

  1. Imprime "Inicio del método async."
  2. Llama a MetodoAsincrono.
  3. Dentro de MetodoAsincrono, imprime "Inicio del método asincrónico."
  4. Se encuentra con await Task.Delay(1000);. Aquí es donde la magia del await sucede. En lugar de bloquear la ejecución del método y esperar 1000 milisegundos, la ejecución de MetodoAsincrono se suspende y la control se devuelve a LlamarMetodoAsync.
  5. Después de 1000 milisegundos, la ejecución de MetodoAsincrono se reanuda, imprimiendo "Final del método asincrónico."
  6. Una vez que MetodoAsincrono ha terminado completamente, la ejecución se reanuda en LlamarMetodoAsync, imprimiendo "Final del método async."

Es importante recordar que async y await no crean nuevos hilos; en su lugar, hacen un uso más eficiente de los hilos existentes. Esto es especialmente útil en aplicaciones con interfaces de usuario, donde bloquear el hilo de la interfaz de usuario (por ejemplo, con operaciones de E/S pesadas) puede hacer que la aplicación parezca congelada. Al utilizar async y await, esas operaciones de E/S pueden realizarse en segundo plano, permitiendo que la interfaz de usuario permanezca receptiva.

Aprende CSharp online

Otros ejercicios de programación de CSharp

Evalúa tus conocimientos de esta lección Uso de async y await con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de CSharp

Accede a todas las lecciones de CSharp y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A C#

Introducción Y Entorno

Creación De Proyecto C#

Introducción Y Entorno

Variables Y Constantes

Sintaxis

Tipos De Datos

Sintaxis

Operadores

Sintaxis

Control De Flujo

Sintaxis

Funciones

Sintaxis

Estructuras De Control Iterativo

Sintaxis

Interpolación De Strings

Sintaxis

Estructuras De Control Condicional

Sintaxis

Manejo De Valores Nulos

Sintaxis

Clases Y Encapsulación

Programación Orientada A Objetos

Objetos

Programación Orientada A Objetos

Constructores Y Destructores

Programación Orientada A Objetos

Herencia

Programación Orientada A Objetos

Polimorfismo

Programación Orientada A Objetos

Genéricos

Programación Orientada A Objetos

Métodos Virtuales Y Sobrecarga

Programación Orientada A Objetos

Clases Abstractas

Programación Orientada A Objetos

Interfaces

Programación Orientada A Objetos

Propiedades Y Encapsulación

Programación Orientada A Objetos

Métodos De Extensión

Programación Orientada A Objetos

Clases Y Objetos

Programación Orientada A Objetos

Clases Parciales

Programación Orientada A Objetos

Miembros Estáticos

Programación Orientada A Objetos

Tuplas Y Tipos Anónimos

Programación Orientada A Objetos

Arrays Y Listas

Colecciones Y Linq

Diccionarios

Colecciones Y Linq

Conjuntos, Colas Y Pilas

Colecciones Y Linq

Uso De Consultas Linq

Colecciones Y Linq

Linq Avanzado

Colecciones Y Linq

Colas Y Pilas

Colecciones Y Linq

Conjuntos

Colecciones Y Linq

Linq Básico

Colecciones Y Linq

Delegados Funcionales

Programación Funcional

Records

Programación Funcional

Expresiones Lambda

Programación Funcional

Linq Funcional

Programación Funcional

Fundamentos De La Programación Funcional

Programación Funcional

Pattern Matching

Programación Funcional

Testing Unitario Con Xunit

Testing

Excepciones

Excepciones

Delegados

Programación Asíncrona

Eventos

Programación Asíncrona

Lambdas

Programación Asíncrona

Uso De Async Y Await

Programación Asíncrona

Tareas

Programación Asíncrona

Accede GRATIS a CSharp y certifícate

Objetivos de aprendizaje de esta lección

  1. Comprender el propósito y beneficios de usar async y await en C#.
  2. Saber cómo marcar un método como async y qué tipo de retorno debe tener.
  3. Entender cómo funciona el operador await para suspender y reanudar la ejecución de métodos asincrónicos.
  4. Familiarizarse con el concepto de programación asincrónica y su utilidad en operaciones de E/S y aplicaciones con interfaces de usuario.
  5. Aprender a escribir código asincrónico para mejorar la eficiencia y capacidad de respuesta de las aplicaciones.