async y await son palabras clave en C# que permiten a los desarrolladores escribir código asincrónico de manera más sencilla. Este código asincrónico es útil cuando se están realizando operaciones que pueden tardar un tiempo en completarse, como las solicitudes de red, las operaciones de disco o cualquier otro tipo de E/S (entrada/salida). En lugar de bloquear la ejecución hasta que se complete la operación (lo que se conoce como operación síncrona), el uso de async y await permite que esas operaciones se realicen en segundo plano, permitiendo a la ejecución principal continuar con otras tareas. Esto puede ayudar a mejorar la eficiencia y la capacidad de respuesta de una aplicación.
A continuación, se presentan algunos conceptos clave sobre async y await:
-
async: Es un modificador que se aplica a un método para indicar que puede tener operaciones asincrónicas. Los métodos marcados conasyncsiempre devolverán unTaskoTask<T>(para métodos con un valor de retorno). Importante: un métodoasyncpor sí solo no hace nada de forma asincrónica. Simplemente permite el uso de la palabra claveawaitdentro de él. -
await: Es un operador que se utiliza para suspender la ejecución de un métodoasynchasta que la tarea asincrónica en la que se usaawaitse complete. En esencia,awaitindica: "Espera aquí hasta que esta operación asincrónica esté terminada, luego continúa con el código que sigue". Importante:awaitsolo puede usarse en un método que esté marcado conasync.
Un ejemplo sencillo:
using System.Threading.Tasks;
public async void LlamarMetodoAsync()
{
Console.WriteLine("Inicio del método async.");
await MetodoAsincrono();
Console.WriteLine("Final del método async.");
}
public async Task MetodoAsincrono()
{
Console.WriteLine("Inicio del método asincrónico.");
await Task.Delay(1000); // Simula una pausa en la ejecución durante 1 segundo
Console.WriteLine("Final del método asincrónico.");
}
LlamarMetodoAsync();
// Imprimirá, en orden:
// Inicio del método async.
// Inicio del método asincrónico.
// Final del método asincrónico.
// Final del método async.
En este caso, cuando se llama a LlamarMetodoAsync, la ejecución procede como sigue:
- Imprime "Inicio del método async."
- Llama a
MetodoAsincrono. - Dentro de
MetodoAsincrono, imprime "Inicio del método asincrónico." - Se encuentra con
await Task.Delay(1000);. Aquí es donde la magia delawaitsucede. En lugar de bloquear la ejecución del método y esperar 1000 milisegundos, la ejecución deMetodoAsincronose suspende y la control se devuelve aLlamarMetodoAsync. - Después de 1000 milisegundos, la ejecución de
MetodoAsincronose reanuda, imprimiendo "Final del método asincrónico." - Una vez que
MetodoAsincronoha terminado completamente, la ejecución se reanuda enLlamarMetodoAsync, imprimiendo "Final del método async."
Es importante recordar que async y await no crean nuevos hilos; en su lugar, hacen un uso más eficiente de los hilos existentes. Esto es especialmente útil en aplicaciones con interfaces de usuario, donde bloquear el hilo de la interfaz de usuario (por ejemplo, con operaciones de E/S pesadas) puede hacer que la aplicación parezca congelada. Al utilizar async y await, esas operaciones de E/S pueden realizarse en segundo plano, permitiendo que la interfaz de usuario permanezca receptiva.
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.
Más tutoriales de CSharp
Explora más contenido relacionado con CSharp y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
- Comprender el propósito y beneficios de usar
asyncyawaiten C#. - Saber cómo marcar un método como
asyncy qué tipo de retorno debe tener. - Entender cómo funciona el operador
awaitpara suspender y reanudar la ejecución de métodos asincrónicos. - Familiarizarse con el concepto de programación asincrónica y su utilidad en operaciones de E/S y aplicaciones con interfaces de usuario.
- Aprender a escribir código asincrónico para mejorar la eficiencia y capacidad de respuesta de las aplicaciones.