Middle
¿Cómo funciona el mecanismo async/await en C#?
sobes.tech AI
Respuesta de la IA
El mecanismo async/await permite escribir código asíncrono que parece sincrónico.
- Palabra clave
async: Marca un método como asíncrono. Tal método puede contener la instrucciónawait. - Palabra clave
await: Se usa antes de llamar a una operación asíncrona (generalmente un método que devuelveTaskoTask<T>). Cuando la ejecución llega aawait, el control se devuelve al método que lo llamó, y el hilo liberado puede realizar otra tarea. Task/Task<T>: Representa una promesa de completar una operación asíncrona y su resultado (paraTask<T>).await"espera" a que esta "promesa" se complete.- Máquina de estados: El compilador transforma el método asíncrono en una máquina de estados. Esta máquina guarda el estado del método al llegar a
await. - Continuación: Cuando la tarea esperada se completa, el entorno de ejecución programa la ejecución de la parte restante del método asíncrono (la continuación) en un hilo del pool o en el mismo contexto de sincronización si está capturado.
- Retorno del control: Tras completar la operación asíncrona, el control regresa al punto después de
await, y la ejecución del método continúa con el estado guardado.
// Método asíncrono
async Task<int> GetLengthAsync(string url)
{
// Crear cliente HTTP
using var client = new HttpClient();
// Realizar solicitud asíncrona a la URL
// Await espera la finalización de la solicitud sin bloquear el hilo
string content = await client.GetStringAsync(url);
// La continuación se ejecuta después de obtener el contenido
return content.Length;
}
// Uso del método asíncrono
async void Button_Click(object sender, EventArgs e)
{
// Await espera a que GetLengthAsync termine
// El hilo de la interfaz de usuario no se bloquea
int length = await GetLengthAsync("https://example.com");
// Actualizar elemento de la interfaz
Label1.Text = $"Longitud del contenido: {length}";
}