CSharp: Programación asíncrona
Descubre cómo implementar programación asíncrona en C# con ejemplos prácticos y recomendaciones actualizadas para programadores de software.
Aprende CSharp GRATIS y certifícateLa 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
Lecciones de este módulo de CSharp
Lecciones de programación del módulo Programación asíncrona del curso de CSharp.
Ejercicios de programación en este módulo de CSharp
Evalúa tus conocimientos en Programación asíncrona con ejercicios de programación Programación asíncrona de tipo Test, Puzzle, Código y Proyecto con VSCode.