Async y Await en C#

Los modificadores async y await en C# facilitan la escritura de código asincrónico, manteniéndolo legible y estructurado como si fuera síncrono. Permiten ejecutar operaciones que tardan (como I/O, llamadas HTTP o bases de datos) sin bloquear el hilo principal, mejorando la capacidad de respuesta de aplicaciones.

Declarar métodos async

Un método marcado como async devuelve generalmente Task o Task<T>. Dentro de él, se puede usar await para esperar asincrónicamente el resultado.

public async Task ObtenerDatosAsync() {
    HttpClient cliente = new HttpClient();
    string datos = await cliente.GetStringAsync("https://api.example.com/data");
    return datos;
}
    

El uso de await libera el hilo mientras espera el resultado.

Llamar a métodos async

Puedes llamar al método y esperar su resultado de forma asincrónica.

string resultado = await ObtenerDatosAsync();
Console.WriteLine(resultado);
    

Esto evita bloqueos, especialmente en aplicaciones UI o servicios web.

Buenas Prácticas

Marca solo los métodos que usan await como async. Evita usar .Result o .Wait() para prevenir deadlocks. Usa ConfigureAwait(false) en librerías para evitar capturar contextos innecesarios. Maneja excepciones con try-catch.

Ver también

Documentación oficial de Microsoft

Ver más en Microsoft Docs