CSharp: Programación asíncrona

CSharp
CSharp
Actualizado: 27/08/2024

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

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

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

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

Completa CSharp y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración