Async et attendre: simplifier la programmation asynchrone sans bloquer l'interface utilisateur
async
et await
sont des outils puissants dans la programmation asynchrone, l'amélioration de la lisibilité du code et la maintenabilité. Cependant, leur opération diffère considérablement des fils d'arrière-plan traditionnels. Clarifions leur comportement.
Considérez ce code:
<code class="language-csharp">private async void button1_Click(object sender, EventArgs e) { Task<int> access = DoSomethingAsync(); // Other UI-responsive tasks here int a = 1; // This executes immediately, not after the 5-second delay int x = await access; // Execution pauses here until DoSomethingAsync completes }</code>
Le mot-clé async
signale le compilateur pour générer une machine d'état. Cette machine gère le cycle de vie de l'opération asynchrone. access
initie une tâche asynchrone (DoSomethingAsync
). Surtout, parce que DoSomethingAsync
utilise await
, la méthode button1_Click
ne bloque pas le thread d'interface utilisateur. La section // Other UI-responsive tasks here
peut exécuter simultanément.
DoSomethingAsync
(non illustré, mais supposé contenir System.Threading.Thread.Sleep(5000)
) introduit un retard de 5 secondes. Cependant, await access
crée le contrôle de l'appelant. L'interface utilisateur reste réactive. Lorsque DoSomethingAsync
se termine, un thread de pool de fil reprend button1_Click
d'où il s'était arrêté, en attribuant le résultat à x
.
Contrairement à Thread.Start()
, async
et await
ne créez pas de nouveaux threads. Au lieu de cela, ils tirent parti du pool de threads et des machines d'état pour gérer efficacement les opérations asynchrones, empêcher les congélations d'interface utilisateur et permettre une exécution simultanée. Cela offre une approche plus propre et plus efficace de la programmation asynchrone.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!