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

C# Discussion :

Gérer des taches asynchrones [Débutant]


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2011
    Messages : 28
    Points : 33
    Points
    33
    Par défaut Gérer des taches asynchrones
    Bonjour,

    J'essaye de comprendre comment fonctionne l'implémentation de taches asynchrones en C# pour faire évoluer du code existant.(Visual studio 2017,FW 4.6.1)
    Mon problème est le suivant :

    Existant synchrone :
    Des Moteurs sont gérés via un service windows qui expose une méthode < bool Etat_Moteur(nom du moteur)>, qui renvoi vrai ou faux en fonction de l'état du moteur. jusque là rien de compliqué.

    Dans un client de ce service, je voudrais obtenir l'actualisation de l'état des moteurs d'une manière asynchrone, et j'ai découvert les Taches qui me paraissent être tout à fait adéquate pour gérer ça.

    J'ai donc créé une méthode asynchrone chargé de cette actualisation : protected async task ActualisationMoteurs () sensé définir et appeler les taches d'actualisation de chaque moteur, de cette manière à priori Task<bool> test = Etat_Moteur("a1"); await test;.
    Mais le code Task<bool> test = Etat_Moteur("a1"); n'est pas correct car l'intellisense me dit qu'il n'est pas possible de convertir un bool en task<bool>.
    De plus, je lis que l'emploi d'une Task ne peut se faire que sur méthodes asynchrones.

    J'ai donc cherché à encapsuler la méthode bool Etat_Moteur(nom du moteur) dans une méthode asynchrone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            protected async Task<bool> EtatMoteurAsync(string cible)
            {
                return await ServiceDistant.EtatCible(cible);
            }
    Mais iSense me dit que bool ne contient pas de définition pour getawaiter... Bref ...

    Comment fait-on pour créer des taches asynchrones appelant des taches synchrones quand ce sont des E/S (pour les calculs processeur, Task.run a l'air plus maléable...)
    Un grand Merci par avance, et si tuto clair quelque part, je suis preneur car je ne trouve beaucoup de tuto, mais aucun de très efficient sur des exemple de base...

    BSharp34

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    13 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 13 932
    Points : 24 578
    Points
    24 578
    Par défaut
    il n'est possible d'utiliser await que sur des méthodes déclarées async, et seulement si la méthode dans laquelle tu es est async aussi
    ta méthode finale ne l'étant pas tu ne peux pas

    Task.Run permet en effet de démarrer une task sur une méthode, et la Task retournée par Task.Run est donc awaitable

    avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var machin = await Task.Run(()=> lafct(params));
    machin contiendra le retour de lafct
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2011
    Messages : 28
    Points : 33
    Points
    33
    Par défaut
    Bonjour Pol63,

    Et merci!
    je suis parti sur le Task.run et tout est Ok après tests

    Un grand merci pour le coup de main,

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    2 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 624
    Points : 10 296
    Points
    10 296
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il n'est possible d'utiliser await que sur des méthodes déclarées async,
    Petite subtilité ici. La méthode n'a pas besoin d'être déclarée async. Elle doit juste renvoyer un Task ! Une méthode async renvoyant toujours un Task (ou un void, mais dans ce cas, on ne l'attend pas) une méthode async est toujours awaitable.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Icone/bouton dans la barre des taches...
    Par dynobremo dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 28/02/2003, 12h05
  2. [VB6] Gestionnaire des tache de windows 2000 avec VB6
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h21
  3. [VB6] [Système] Barre des taches
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 15h16
  4. desactiver la barre des taches
    Par naili dans le forum C++Builder
    Réponses: 7
    Dernier message: 02/09/2002, 17h57

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