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

ASP.NET Discussion :

Faire du sync avec de l'async


Sujet :

ASP.NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Expert confirm�
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    F�vrier 2010
    Messages
    4 197
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Chef de projets
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par d�faut Faire du sync avec de l'async
    Bonjour,

    Je travaille sur un PlugIn pour une application Web qui est cod�e en C# avec le Framework 4.8

    J'ai besoin � un moment d'appeler une API REST pour r�cup�rer des informations afin de compl�ter la saisie d'un utilisateur lorsqu'il enregistre ses donn�es :
    Code csharp : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Xml.XPath;
     
    // Aurea.CRM libraries
    using update.Lib.ComponentModel;
    using update.Lib.Contracts.Services;
    using update.Lib.Extensions;
    using update.Web.Base.Extensions;
    using update.Crm.Contracts.Events;
    using update.Lib.Contracts.Events;
    using update.Lib.Logging;
    using System.Security.Policy;
    using update.Crm.Core.Contracts;
    using data = update.Crm.Contracts.Data;
    using update.Crm.Extensions;
     
    // INSEE API
    using MySirene;
    using MySirene.INSEE;
     
    namespace AureaDemoPlugIn
    {
        public class SirenePlugIn : PlugInBase
        {
            /// <summary>
            /// Constructor
            /// </summary>
            public SirenePlugIn()
            {
            }
     
            /// <summary>
            ///  Initialize the PlugIn
            /// </summary>
            /// <param name="settingsNavigator"></param>
            protected override void Init(XPathNavigator settingsNavigator)
            {
                var events = Services.Get<IEventHub>();
                events.StartObserving<UpdateEventArgs>("/InfoAreas/FI/PreUpdate", OnCompanyChange);
            }
     
            /// <summary>
            /// Dispose & Unregister services
            /// </summary>
            /// <param name="isDisposing"></param>
            protected override void Dispose(bool isDisposing)
            {
                var events = Services.Get<IEventHub>();
                events.StopObserving<UpdateEventArgs>("/InfoAreas/FI/PostUpdate", OnCompanyChange);
            }
     
            public static void OnCompanyChange(object sender, UpdateEventArgs args)
            {
                const int FI_NANE = 2;
                const int FI_SYNONYM = 3;
                const int FI_PHONE = 15;
                const int FI_SIRET = 61;
     
                LogFacility f = new LogFacility("AureaDemoPlugIn");
                Log.Current.Debug(f, $"A company was changed. It's uid is {args.BusinessObject.Uid}.");
     
                // SIRET change
                if (args.BusinessObject.FieldIds.Contains(FI_SIRET))
                {
     
                    Sirene sirene = new Sirene("****", "****");
                    //Siret siret = await sirene.GetSiret(numeroSiret); <== marche pas !
                    Task<Siret> tSiret = sirene.GetSiret(numeroSiret);
                    tSiret.Wait();                            // <= reste bloqué ici (à priori)
                    Siret siret = tSiret.Result;
     
                    args.BusinessObject.Set(FI_NANE, siret.etablissement.uniteLegale.denominationUniteLegale);
                }
            }
        }
    }

    Si je mets le Siret siret = await sirene.GetSiret(numeroSiret); avec un async en dans le event handler OnCompanyChange j'ai une erreur qui me dit qu'on peut pas faire de l'async en ASP.NET � moins de mettre Async="true" dans la d�claration de la page ASPX.
    Sauf que j'ai pas la main sur l'ASPX, et je ne ma�trise pas les effets de bord potentiels.

    En revanche, le code ci-dessus, qui correspond � ma tentative de contournement, reste bloqu�, je pense sur le tSiret.Wait();
    Comment m'en sortir ?

    Toutes les librairies REST/JSON on leurs m�thodes synchrones deprecated, je suis donc oblig� d'utiliser les m�thodes async... Ou alors utiliser de vieilles versions pleines de trous de s�curit�...

  2. #2
    Expert confirm�
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    F�vrier 2010
    Messages
    4 197
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Chef de projets
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par d�faut
    Non non, je ne suis pas un boulet...

    Avant d'attendre la fin de la t�che, c'est bien de la d�marrer...

    Code csharp : S�lectionner tout - Visualiser dans une fen�tre � part
    Siret siret = sirene.GetSiret(numeroSiret).GetAwaiter().GetResult();

    Et �a marche nickel maintenant !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Peut-on faire du cluster avec winXP ?
    Par wikers dans le forum Windows XP
    R�ponses: 37
    Dernier message: 02/06/2009, 11h13
  2. Probl�me unit CRT pour Faire du Pascal avec Delphi
    Par alexmorel dans le forum D�buter
    R�ponses: 4
    Dernier message: 01/06/2004, 17h13
  3. [INDY] comment faire un 'POST' avec idHTTP??
    Par gamez dans le forum Composants VCL
    R�ponses: 5
    Dernier message: 17/05/2004, 19h02
  4. Faire une JFrame avec LookAndFeel
    Par aburner dans le forum Agents de placement/Fen�tres
    R�ponses: 5
    Dernier message: 03/12/2003, 08h54
  5. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    R�ponses: 2
    Dernier message: 16/07/2003, 16h08

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