IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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 , par tomlev

27PARTAGES



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# : Sélectionner tout
    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# : Sélectionner tout
    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# : Sélectionner tout
    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 ?

Une erreur dans cette actualité ? Signalez-nous-la !