Developpez.com - Programmation

Le Club des Développeurs et IT Pro

Utilisez-vous le nouveau modèle de programmation asynchrone de C# 5/VB 11 ?

Qu'en pensez-vous ? Participez au débat et partagez votre expérience

Le 2013-07-29 20:17:20, par tomlev, Rédacteur/Modérateur


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.

Une introduction à la programmation asynchrone en C# 5, par Eric Lippert

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# :
    1
    2
    3
    4
    5
    6
    private 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# :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private 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# :
    1
    2
    3
    4
    5
    6
    private 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 ?

Utilisez-vous le nouveau modèle de programmation asynchrone ? En C# ou en VB.NET ? Sur quelle plateforme (bureau, Windows Phone, WinRT, ASP.NET…) ?
Si non, pourquoi ? Éprouvez-vous des difficultés à comprendre son fonctionnement ?
Si oui, qu'en pensez-vous ? Comment a-t-il changé votre façon de programmer ? Quelles difficultés avez-vous rencontrées lors de son utilisation ?

À lire aussi :

Quel est votre langage de programmation préféré en 2013 ?

Quel est votre environnement de développement (EDI) préféré en 2013 ?