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 :

mettre en place un timeout sur une instruction


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut mettre en place un timeout sur une instruction
    Bonjour,

    dans mon programme, je fais appel à un webservice dont je n'ai pas la gestion... Et qui dit "web service" dit "potentiels problèmes de réseau lors d'un appel". Pour éviter de gaufrer mon programme alors qu'un seul appel ne passe pas suite à une micro coupure, je voudrais mettre en place un time out sur mon appel. Vers quelles fonctions / classes / méthodes m'orienteriez-vous ? (je ne demande pas du code tout fait, mais une piste)

    Merci de votre aide !

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Utilise un Thread pour appeler ton webservice. ça fera un truc genre
    Code c# : 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
    30
     
    bool finished = false;
                bool success = false;
                Thread th = new Thread(new ThreadStart(delegate
                {
                    SummonZeWebService();
     
                    finished = true;
                    success = true;
                }));
                th.Start();
     
                DateTime start = DateTime.Now;
                while (!finished && DateTime.Now.Subtract(start).TotalSeconds < 60) /* 60 secondes */
                {
                    Thread.Sleep(10);
                }
                if (!finished)
                {
                    try
                    {
                        th.Abort();
                    }
                    catch { }
                    Failure();
                }
                else
                {
                      Victory();
                }

  3. #3
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    Merci de ta réponse...

    Par contre je ne connais pas bien le fonctionnement des threads... Le fait que je boucle pour faire plusieurs fois (> 300) appel au même webservice (avec des valeurs différentes) ne risque-t-il pas de poser un souci ? (je pense notamment au nombre d'instances de threads)

    Existe-t-il une autre solution sans thread ?

    Merci !

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Si ils sont appelés de manière successive en gros tu aura qu'un seul thread à la fois qui sera en train d'appeler le WebService donc pas de problème car chaque thread s'arrête lorsque le code qu'il "contient" se termine.
    S'ils sont appelés simultanément là ça devient autre chose et tu sera peut être contraint d'utiliser un ThreadPool (google t'en apprendra plus sur ce point).

  5. #5
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut
    Donc ça devrait bien se passer puisque cela va se présenter, en gros, de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i=0; i < nombre_max; i++){
     
       Le code que tu m as donné
     
    }
    Juste histoire que je sois sûr, tu ne vois pas de contre-indication à l'utilisation du thread ?

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Bah ça devrais aller. Mais tu devrais quand même regarder les histoires de ThreadPool, ça pourrai te servir par la suite, vu que question performances c'est toujours un peut lent de démarrer un nouveau thread.

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/06/2013, 11h18
  2. [PHPUnit] Mettre en place les tests sur une solution existante
    Par UNi[FR] dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/05/2011, 12h21
  3. [AC-2000] Mettre en place un contrôle sur une table Access
    Par ceuce dans le forum VBA Access
    Réponses: 9
    Dernier message: 15/09/2010, 17h23
  4. Mettre en place des droits sur une vue différents de ceux de la table-source ?
    Par Antoun dans le forum Administration et Installation
    Réponses: 14
    Dernier message: 15/02/2010, 14h13
  5. [VBA-W]changer de place un numero sur une page word
    Par benco dans le forum VBA Word
    Réponses: 1
    Dernier message: 26/03/2006, 12h37

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