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
Lecciones de este módulo
Explora todas las lecciones disponibles en Programación asíncrona
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.