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 :

Bug dans un programme asynchrone


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Points : 20
    Points
    20
    Par défaut Bug dans un programme asynchrone
    Bonjour,

    J'ai mis un point d'arrêt à la ligne 10. Mais le programme s'arrête avant.
    has exited with code 0 (0x0).
    Si je mets un point à la ligne 26 par contre. On passe bien par le point d'arrêt de la ligne 10.
    Je ne comprend pas d'où vient ce problème.
    Merci d'avance pour votre aide.

    cordialement.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static int a=0;
            static async Task<int> f()
            {
                await Task.Delay(1000); //2
                return 1;
            }
            static async Task g()
            {
                int p=await f(); //1
                a= 1+p;
            }
     
            static void Main(string[] args)
            {
                System.Diagnostics.Stopwatch minuterie = new System.Diagnostics.Stopwatch();
                minuterie.Start();
                g(); //0
                minuterie.Stop(); //3
                a = 100;
                Console.WriteLine("{0}", a);
                Console.WriteLine(" {0} ms.", minuterie.ElapsedMilliseconds);
                }
        }
    }

  2. #2
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Aucun bug ici, tout est normal.

    Il faut bien comprendre que lorsque le programme principal se termine, c'est-à-dire qu'on sort de la méthode Main, le programme se termine, indépendamment des tâches qui seraient en attente d'exécution.

    Il est possible d'attendre que les tâches se terminent avant de quitter la méthode Main. Pour cela, il faut utiliser un code comme :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Task t = g(); // On récupère la tâche associée à l'exécution de g()
    ...
    // Et juste avant la fin de la méthode Main
    Task.Wait(t);
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Merci à François DORIN pour sa réponse.
    J'en profite pour rajouter les 2 using que j'ai oublié de mettre dans mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    using System;
    using System.Threading.Tasks;

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

Discussions similaires

  1. Bug dans mon programme de tirage
    Par jeanmarc41 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 22/04/2018, 16h02
  2. Un Bug dans mon programme
    Par Mr Ilias dans le forum C
    Réponses: 2
    Dernier message: 17/01/2012, 23h19
  3. bug dans mon programme (message d'erreur)
    Par maxmarie dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 13/09/2007, 10h34
  4. Bug dans un programme sous 13H
    Par tixweb dans le forum Windows
    Réponses: 4
    Dernier message: 09/11/2006, 08h46
  5. bug dans programme d'extraction de données d'une page web
    Par youpimevla dans le forum Web & réseau
    Réponses: 11
    Dernier message: 31/08/2006, 10h02

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