Async / Await
Conceptos Fundamentales de la Programación Asíncrona
La programación asíncrona permite que una aplicación realice
múltiples tareas al mismo tiempo sin bloquear el hilo principal.
En C#, la palabra clave async se utiliza para marcar un método como
asíncrono, mientras que await se emplea para esperar la finalización
de una tarea.
Beneficios: - Mejora el rendimiento y la capacidad de respuesta de la aplicación. - Permite ejecutar operaciones de I/O (entrada/salida) sin bloquear el flujo principal. - Facilita la escritura de código más legible en comparación con callbacks tradicionales.
Ejemplo Básico
public async Task<string> ObtenerDatosAsync()
{
await Task.Delay(2000); // Simula un proceso asíncrono
return "Datos obtenidos";
}
Ejercicios Prácticos con async & await
- Crear un método que espere 3 segundos y luego retorne un mensaje en consola.\
- Hacer una llamada asíncrona a una API pública usando
HttpClienty mostrar el resultado.\ - Ejecutar varias tareas asíncronas en paralelo y combinar sus resultados.
Manejo de Tareas (Tasks)
La clase Task representa una operación asíncrona que puede devolver un
resultado.
Existen diferentes formas de declarar y utilizar tareas en C#.
Ejemplo con Task simple
public async Task ProcesoSimple()
{
await Task.Delay(1000);
Console.WriteLine("Proceso completado");
}
Ejemplos de Task con Diferentes Tipos de Retorno
Task<IEnumerable<string>>
public async Task<IEnumerable<string>> ObtenerNombresAsync()
{
await Task.Delay(500);
return new List<string> { "Ana", "Luis", "Carlos" };
}
Task<Dictionary<int, string>>
public async Task<Dictionary<int, string>> ObtenerDiccionarioAsync()
{
await Task.Delay(500);
return new Dictionary<int, string>
{
{ 1, "Uno" },
{ 2, "Dos" },
{ 3, "Tres" }
};
}
Task<object>
public async Task<object> ObtenerObjetoAsync()
{
await Task.Delay(500);
return new { Id = 1, Nombre = "Ejemplo" };
}
Task<(int, string)>
public async Task<(int, string)> ObtenerTuplaAsync()
{
await Task.Delay(500);
return (1, "Dato");
}
Task<int>
public async Task<int> CalcularSumaAsync(int a, int b)
{
await Task.Delay(500);
return a + b;
}