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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Utilisez-vous le nouveau modèle de programmation asynchrone de C# 5/VB 11 ?

Votants
44. Vous ne pouvez pas participer à ce sondage.
  • Oui

    20 45,45%
  • Non

    14 31,82%
  • La programmation asynchrone, c'est quoi encore ça ?

    5 11,36%
  • Je ne programme pas en C# ou VB.NET

    5 11,36%
Langages Discussion :

Utilisez-vous le nouveau modèle de programmation asynchrone de C# 5/VB 11 ? Qu'en pensez-vous ? [Débat]


Sujet :

Langages

  1. #41
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Pour l'instant, j'ai l'impression que Microsoft a réussi à faire utiliser toutes les features qu'ils ont ajoutées (même si je n'ai pas encore beaucoup vu d'usages de in/out pour la co-Contravariance, ou de dynamic pour le dispatch dynamique)
    La covariance ça sert pas mal en fait, souvent sans même y penser : ça parait assez naturel qu'une List<Giraffe> puisse être considérée comme un IEnumerable<Animal> (il faut réfléchir un peu plus pour comprendre pourquoi ce n'est pas une IList<Animal> mais bon...). La contravariance c'est un peu plus rare, mais ça arrive quand même de s'en servir. Par exemple, si tu as un IEqualityComparer<Animal>, ça semble logique qu'il puisse servir de IEqualityComparer<Giraffe> (s'il peut comparer des animaux, il peut comparer des girafes). Bon après, c'est sûr qu'on définit pas des interface ou délégués co- ou contravariants tous les jours...

    dynamic, pour le coup, je ne m'en sers absolument pas. C'est utile pour des scénarios assez spécifiques, comme l'interop avec Office ou avec des langages dynamiques, mais en dehors de ça je ne vois pas vraiment l'intérêt.

    Mais dans l'ensemble c'est vrai que la plupart des features ajoutées à C# ont une vraie utilité, et sont d'habitude assez largement adoptées. Même des features "gadgets" comme les paramètres optionnels ont leur utilité et permettent de "fluidifier" l'écriture et la lecture du code.

  2. #42
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par tomlev Voir le message
    La covariance ça sert pas mal en fait, souvent sans même y penser
    Utiliser bien sûr, je veux dire qu'hormis ce que le framework propose, e je n'ai pas vu de classe générique qui spécifie Bidule<out T> explicitement.

    Citation Envoyé par tomlev Voir le message
    dynamic, pour le coup, je ne m'en sers absolument pas.
    Ben je voyais récemment que ça peut se permettre de se passer de Double Dispatch. On préfère chez nous en rester à notre bon vieux visitor pour gérer ça.
    ಠ_ಠ

  3. #43
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Utiliser bien sûr, je veux dire qu'hormis ce que le framework propose, e je n'ai pas vu de classe générique qui spécifie Bidule<out T> explicitement.
    Oui car c'est réservé aux interfaces et délégués Mais personnellement, je le mets toujours quand c'est possible (Resharper m'aide bien à le déterminer d'ailleurs)
    Citation Envoyé par Guulh Voir le message
    Ben je voyais récemment que ça peut se permettre de se passer de Double Dispatch. On préfère chez nous en rester à notre bon vieux visitor pour gérer ça.
    Ca c'est super cool comme truc et je trouve que c'est une bonne utilisation
    Le problème du dynamique c'est que c'est un mot clef assez "épidémique": dès qu'on l'utilise il se propage partout (via les signatures). Donc, une utilisation contenue comme ca est pas mal.

  4. #44
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Citation Envoyé par Nicam Voir le message
    VSnet 2012, lorsqu'on est une entreprise (hors autoentrepreneur), ca coute environ 500 euros HT (version pro), c'est presque donné (regardé le coût des plugins Xamarin pour comparaison ...)
    Je suis d'accord avec toi, surtout qu'on dépense des millions ailleurs.

    J'aurais beaucoup à dire à propos des décisions budgétaires de ma boite, mais comme je poste sous mon vrai nom, je vais essayer de garder mon job
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  5. #45
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ben je voyais récemment que ça peut se permettre de se passer de Double Dispatch. On préfère chez nous en rester à notre bon vieux visitor pour gérer ça.
    Intéressant... C'est un peu du bricolage, mais je vois un cas où ça m'aurait bien servi pour une appli au boulot. Je garde ça sous le coude en tous cas

  6. #46
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 66
    Points
    66
    Par défaut
    Il manque dans le sondage, "Je ne travaille pas avec un framework compatible".

    Je suis encore .net 4 sous VS2010 au travaille, mais j'attends avec plus d'impatience la prochaine update de nos services.

    Malheureusement, je n'ai pas ce genre de besoin pour mes projets personnels.

  7. #47
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut async / await avec try / catch
    Bonjour à tous,
    L'exemple donné à le mérite d'être très simple mais l'avantage réel d'utiliser async/await est surtout remarquable dans des configurations de code un peu plus complexes.
    Par exemple on peut utiliser await dans des blocs try/catch alors que si on développe le code sans ces mots clés on obtient des constructions beaucoup plus complexes et beaucoup moins lisibles.

  8. #48
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par manuel_o Voir le message
    Par exemple on peut utiliser await dans des blocs try/catch alors que si on développe le code sans ces mots clés on obtient des constructions beaucoup plus complexes et beaucoup moins lisibles.
    C'est vrai, je me souviens avoir pas mal galéré avec les ContinueWith en .NET 4, où il fallait vérifier le statut de la tâche pour savoir si elle avait réussi, c'était vraiment pas pratique... Par contre, petite précision : on peut utiliser await dans les blocs try, mais pas dans les blocs catch... Ce qui fait qu'on ne peut pas écrire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        try
        {
            await DoSomethingAsync();
        }
        catch(Exception ex)
        {
            var dlg = new MessageDialog(ex.ToString(), "Error");
            await dlg.ShowAsync();
        }
    On est obligé de faire une pirouette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        string errorMessage = null;
        try
        {
            await DoSomethingAsync();
        }
        catch(Exception ex)
        {
            errorMessage = ex.ToString();
        }
     
        if (errorMessage != null)
        {
            var dlg = new MessageDialog(errorMessage, "Error");
            await dlg.ShowAsync();
        }
    Ce qui est déjà nettement moins clair... mais bon, c'est quand même mieux qu'avec des Task

  9. #49
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par tomlev Voir le message
    C'est vrai, je me souviens avoir pas mal galéré avec les ContinueWith en .NET 4, où il fallait vérifier le statut de la tâche pour savoir si elle avait réussi, c'était vraiment pas pratique... Par contre, petite précision : on peut utiliser await dans les blocs try, mais pas dans les blocs catch... Ce qui fait qu'on ne peut pas écrire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        try
        {
            await DoSomethingAsync();
        }
        catch(Exception ex)
        {
            var dlg = new MessageDialog(ex.ToString(), "Error");
            await dlg.ShowAsync();
        }
    On est obligé de faire une pirouette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        string errorMessage = null;
        try
        {
            await DoSomethingAsync();
        }
        catch(Exception ex)
        {
            errorMessage = ex.ToString();
        }
     
        if (errorMessage != null)
        {
            var dlg = new MessageDialog(ex.ToString(), "Error");
            await dlg.ShowAsync();
        }
    Ce qui est déjà nettement moins clair... mais bon, c'est quand même mieux qu'avec des Task
    Tu connais ca sinon ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var t = DoSomethingAsync();
    var tHandle = t.ContinueWith(HandleErrror, TaskContinuationOptions.OnlyOnFaulted); //équivaut au catch
    var tNext = t.ContinueWith(HandleNext, TaskContinuationsOptions.NotOnFaulted);
    Task.Factory.ContinueWhenAny(WhatsNext, new []{tHandle, tNext});
    (c'est de tête hein)
    Bon j'avoue que c'est pas forcément plus lisible mais il y'a bien des cas ou je préfère mais c'est plus souvent quand je fais du parallélisme que de l'asynchronisme

  10. #50
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Tu connais ca sinon ?
    Oui mais j'aime pas trop... Je trouve pas ça lisible, et je me souviens jamais ce qui se passe si je fais par exemple "NotOnFaulted" et qu'il y a une erreur...

    Par contre, il y a un truc qui peut arranger un peu les choses, c'est la méthode Then proposée par Stephen Toub :
    http://blogs.msdn.com/b/pfxteam/arch.../10094564.aspx

  11. #51
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Je l'utilise pas encore, principalement parce que je développe pour Winforms sur des postes XP avec VS2010 et que même si on peut bricoler pour en bénéficier je ne m'amuse pas à le faire vu qu'il s'agit plus d'une "simplification de syntaxe" que d'une nouvelle key feature.

    Charger des données sans bloquer l'interface étant quand même une problématique pas très nouvelle, pour laquelle on s'est déjà fait proposer des solutions "simple" par Microsoft (comme le background worker). Je vois pas l'intérêt de faire la girouette et de me retrouver avec plusieurs façons de faire pour résoudre le même problème (en plus cette dernière ne permet pas d'afficher une progression, en l'état).

    Il faut aussi être conscient que cette fonctionnalité a été livrée avec un package un peu plus conséquent concernant le chargement des données dans un contrôle d'affichage asynchrone. (sujet sur lequel je vais pas m'étendre car depuis la présentation je n'ai pas approfondi le sujet)

    Bien entendu, le jour ou on décidera de laisser tomber Winforms pour Modern UI ou le prochain truc qui suivra, bien entendu que je réviserais mon jugement sur l'utilisation de cette fonctionnalité!

  12. #52
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sinople Voir le message
    vu qu'il s'agit plus d'une "simplification de syntaxe" que d'une nouvelle key feature.
    Si tu penses que c'est juste une simplification de syntaxe, c'est clairement que tu ne l'as pas utilisé... tu changeras certainement d'avis le jour où tu t'en serviras

    Citation Envoyé par sinople Voir le message
    (en plus cette dernière ne permet pas d'afficher une progression, en l'état).
    Bah si, regarde mon exemple un peu plus haut... ça permet même de le faire plus simplement qu'avant.

    Citation Envoyé par sinople Voir le message
    Il faut aussi être conscient que cette fonctionnalité a été livrée avec un package un peu plus conséquent concernant le chargement des données dans un contrôle d'affichage asynchrone. (sujet sur lequel je vais pas m'étendre car depuis la présentation je n'ai pas approfondi le sujet)
    C'est à dire ? Je ne vois pas de quoi tu parles

  13. #53
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    Je fais partie de ceux qui sont tombé sous le charme ; ça m’évite de me tordre les neurones avec les delegate et leur BeginInvoke/EndInvoke (ou de passer par des threads par pure flemme).
    Bref, du tout bon.
    Le WIP de The last bastion, mon projet de jeu-vidéo (un TD en 3D)

    Mon portfolio / Ma page fb

  14. #54
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Utiliser bien sûr, je veux dire qu'hormis ce que le framework propose, e je n'ai pas vu de classe générique qui spécifie Bidule<out T> explicitement.
    Bête question à quoi sert le out?
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  15. #55
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Bête question à quoi sert le out?
    A indiquer que le type Bidule est covariant en T (in indique que c'est contravariant)

    L'exemple classique est IEnumerable<out T> ; la contravariance permet de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IEnumerable<Giraffe> giraffes = new List<Giraffe>();
    IEnumerable<Animal> animals = giraffes;
    Avant C# 4, tu aurais eu une erreur de compilation, même si ça semblait évident qu'une séquence de girafes était aussi une séquence d'animaux...

    Mais attention, le principe ne peut pas s'utiliser de façon aussi générale qu'on pourrait le croire... par exemple l'interface IList<T> n'est pas covariante ; si elle l'était, ça permettrait d'écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IList<Giraffe> giraffes = new List<Giraffe>();
    IList<Animal> animals = giraffes;
    animals.Add(new Dog());
    animals est toujours une instance de List<Giraffe>, donc ajouter un chien à cette liste échouerait à l'exécution. Mais comme l'interface n'est pas covariante, le compilateur ne te laisse pas faire ce genre d'erreur.

    cf. cet article: Variance en C# 4

  16. #56
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    merci

    J'avais lu qu'il avait introduit le covariant et le contravariant mais je me souvenait plus qu'il fallait out/in pour que celle-ci marche.
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  17. #57
    Membre averti
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Points : 337
    Points
    337
    Par défaut
    J'utilise encore le bon vieux BackgroundWorker (Framework 4 et WPF) qui est simple et efficace pour toutes sortes de tâches. Je peux même appeler des méthodes synchrones depuis un BackgroundWorker en utilisant un delegate et les rendre asynchrone.
    J'essayerais une autre méthode quand celle-ci ne me donnera plus entière satisfaction.

  18. #58
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Utilisez-vous le nouveau modèle de programmation asynchrone ? En C# ou en VB.NET ? Sur quelle plateforme (bureau, Windows Phone, WinRT, ASP.NET…) ?
    Je l'ai utilisé en C# à l'occasion d'un programme Windows Store et je le réutiliserai certaines fois.

    Il me semble très bien adapté pour les tâches à réaliser en arrière-plan de l'UI (ou tout autre système avec des objets ayant une affinité avec certains threads) et pour les data flows avec de longues périodes d'attente (vivent les continuations).

    Puisque ces cas sont les plus fréquents, async/await constituent une excellente addition à C#. Mais sorti de ces cas de figure l'outil devient vite limité à mon goût et il y bien des problèmes de concurrence pour lesquels je préfère me passer entièrement d'async/await pour un contrôle plus direct.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/03/2008, 18h03
  2. Que pensez-vous de mon modèle ?
    Par Igou77 dans le forum Schéma
    Réponses: 7
    Dernier message: 23/10/2007, 23h19
  3. Que pensez vous du nouveau kernel 2.6 ?
    Par GLDavid dans le forum Administration système
    Réponses: 58
    Dernier message: 02/08/2004, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo