Módulo: Programación asíncrona
Este módulo forma parte del curso de CSharp. Incluye 5 lecciones y 11 ejercicios de programación .
La programación asíncrona en C# permite ejecutar tareas de manera no bloqueante, mejorando el rendimiento de las aplicaciones. En el contexto de C#, la programación asíncrona se realiza principalmente utilizando las palabras clave async y await, además de las clases Task y Task<T>. A continuación, se presentan conceptos clave y ejemplos prácticos para entender y aplicar programación asíncrona en C#.
Conceptos básicos
async y await
Las palabras clave async y await son fundamentales en la programación asíncrona de C#. La palabra clave async se utiliza para marcar un método como asíncrono, mientras que await se utiliza para esperar de manera asíncrona la finalización de una tarea.
public async Task EjemploAsincrono()
{
await TareaAsincrona();
}
Task y Task
La clase Task representa una operación asíncrona que no devuelve un valor, mientras que Task<T> representa una operación asíncrona que devuelve un valor de tipo T.
public async Task<int> ObtenerResultadoAsincrono()
{
await Task.Delay(1000); // Simula una operación asíncrona
return 42;
}
Implementación de métodos asíncronos
Métodos que no devuelven valor
Para implementar un método asíncrono que no devuelva un valor, se utiliza Task como tipo de retorno y se emplea await para esperar la finalización de tareas asíncronas.
public async Task ProcesarDatosAsincrono()
{
// Simula una operación de procesamiento de datos
await Task.Delay(2000);
Console.WriteLine("Datos procesados");
}
Métodos que devuelven valor
Para métodos que devuelven un valor, se utiliza Task<T> como tipo de retorno y se emplea await para obtener el resultado de la tarea.
public async Task<string> ObtenerDatosAsincrono()
{
await Task.Delay(1000); // Simula una operación asíncrona
return "Datos obtenidos";
}
Manejo de excepciones
En la programación asíncrona, las excepciones pueden ser manejadas utilizando bloques try-catch dentro de los métodos marcados con async.
public async Task ManejarExcepcionesAsincrono()
{
try
{
await Task.Run(() => throw new InvalidOperationException("Error simulado"));
}
catch (InvalidOperationException ex)
{
Console.WriteLine($"Excepción manejada: {ex.Message}");
}
}
Ejecución paralela de tareas
Para ejecutar múltiples tareas en paralelo, se puede utilizar Task.WhenAll, que espera a que todas las tareas proporcionadas se completen.
public async Task EjecutarTareasParalelas()
{
var tarea1 = Task.Delay(1000);
var tarea2 = Task.Delay(2000);
await Task.WhenAll(tarea1, tarea2);
Console.WriteLine("Todas las tareas completadas");
}
Cancelación de tareas
La cancelación de tareas se maneja mediante el uso de CancellationToken. Este token se pasa a los métodos asíncronos y permite cancelar la ejecución de las tareas.
public async Task CancelarTarea(CancellationToken token)
{
try
{
await Task.Delay(5000, token);
}
catch (OperationCanceledException)
{
Console.WriteLine("Tarea cancelada");
}
}
Para utilizar CancellationToken, se debe crear una instancia de CancellationTokenSource y pasar su token a los métodos asíncronos.
var cts = new CancellationTokenSource();
var tarea = CancelarTarea(cts.Token);
cts.Cancel(); // Cancela la tarea
Ejercicios de programación
Otros módulos de este curso
Lecciones de este módulo
Explora todas las lecciones disponibles en Programación asíncrona
Todos los módulos del curso
Navega entre los módulos de CSharp
Explora más sobre CSharp
Descubre más recursos de CSharp
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, CSharp es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.