Middle
Comment fonctionne le mécanisme async/await en C#?
sobes.tech IA
Réponse de l'IA
Le mécanisme async/await permet d'écrire du code asynchrone qui ressemble à du code synchrone.
- Mot-clé
async: Marque une méthode comme asynchrone. Une telle méthode peut contenir l'instructionawait. - Mot-clé
await: Utilisé avant d'appeler une opération asynchrone (généralement une méthode retournantTaskouTask<T>). Lorsque l'exécution atteintawait, le contrôle est rendu à la méthode appelante, et le thread libéré peut effectuer une autre tâche. Task/Task<T>: Représente une promesse de compléter une opération asynchrone et son résultat (pourTask<T>).await"attend" la complétion de cette "promesse".- Machine à états : Le compilateur transforme la méthode asynchrone en une machine à états. Cette machine conserve l'état de la méthode lorsqu'elle atteint
await. - Continuation : Lorsque la tâche attendue se termine, l'environnement d'exécution planifie l'exécution de la partie restante de la méthode asynchrone (la continuation) sur un thread du pool ou dans le même contexte de synchronisation si celui-ci est capturé.
- Retour du contrôle : Après la fin de l'opération asynchrone, le contrôle revient au point après
await, et l'exécution de la méthode continue avec l'état sauvegardé.
// Méthode asynchrone
async Task<int> GetLengthAsync(string url)
{
// Créer un client HTTP
using var client = new HttpClient();
// Effectuer une requête asynchrone à l'URL
// Await attend la fin de la requête sans bloquer le thread
string content = await client.GetStringAsync(url);
// La continuation s'exécute après avoir obtenu le contenu
return content.Length;
}
// Utilisation de la méthode asynchrone
async void Button_Click(object sender, EventArgs e)
{
// Await attend la fin de GetLengthAsync
// Le thread UI n'est pas bloqué
int length = await GetLengthAsync("https://example.com");
// Mettre à jour l'élément UI
Label1.Text = $"Longueur du contenu : {length}";
}