![](https://www.developpez.com/images/logos/sondage2.gif)
![:salut:](https://www.developpez.net/forums/images/smilies/salut.gif)
Utilisez-vous le nouveau modèle de programmation asynchrone de C# 5/VB 11 ?
Comme vous le savez sans doute, la version 5 de C# (comme la version 11 de VB.NET) a introduit de nouveaux mots-clés pour faciliter l'écriture de code asynchrone : async et await. Ce nouveau modèle permet d'écrire très simplement du code qui ne bloque pas l'UI et ne monopolise pas inutilement des threads de travail.
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
Par exemple, pour télécharger des données depuis le web :
- code synchrone (bloque l'UI pendant l'exécution de la requête) :
Code C# : Sélectionner tout 1
2
3
4
5
6private void btnDownload_Click(object sender, EventArgs e) { var client = new WebClient(); string data = client.DownloadString("http://monserveur.com/data"); txtData.Text = data; }
- code asynchrone « classique » :
Code C# : Sélectionner tout 1
2
3
4
5
6
7
8
9
10
11private void btnDownload_Click(object sender, EventArgs e) { var client = new WebClient(); client.DownloadStringCompleted += client_DownloadStringCompleted; client.DownloadStringAsync("http://monserveur.com/data"); } private void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { txtData.Text = e.Result; }
Ce code est nettement moins lisible ; le déclenchement de la requête est séparé de la récupération du résultat, ce qui rend le déroulement plus difficile à suivre. - code asynchrone C# 5 :
Code C# : Sélectionner tout 1
2
3
4
5
6private async void btnDownload_Click(object sender, EventArgs e) { var client = new WebClient(); string data = await client.DownloadStringTaskAsync("http://monserveur.com/data"); txtData.Text = data; }
On remarque que ce code est quasiment identique au code synchrone de départ ; on l'a rendu asynchrone, sans rien sacrifier à la lisibilité.
Microsoft pousse de plus en plus à l'utilisation de ce modèle, notamment sur Windows Phone 8 et dans les applications Windows Store (Metro) ; bien souvent, seules des API asynchrones sont proposées, et les API synchrones habituelles sont supprimées si elles existaient.
Pourtant, il me semble qu'on voit assez peu de discussions qui abordent ce sujet sur les forums, ce qui me pousse à ouvrir ce débat…
Et vous ?
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
À lire aussi :
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:fleche:](https://www.developpez.net/forums/images/smilies/fleche.gif)
![:merci:](https://www.developpez.net/forums/images/smilies/merci.png)