0
votes

Erreur de fonctions Async RestSharp ASYNC avec EXECUTEASYNC ()

J'ai une méthode Io liée qui est suspendue pour une seconde seconde lors de la récupération de données. J'ai tenté de convertir la méthode en une méthode asyncho, mais j'ai des problèmes avec cela.

J'ai inclus ci-dessous la version non asynchraine du code, et ma tentative de le rendre ASYNC. P>

    //non async method
    public double GetBaseline()
    {
        var Client = new RestClient();
        IRestResponse response;
        Client.BaseUrl = new Uri("https://apiv2.bitcoinaverage.com/indices/global/ticker/short?crypto=BTC&fiat=USD");
        CryptoAverage BTCAvg;
        var request = new RestRequest();
        response = Client.Execute(request);
        BTCAvg = JsonConvert.DeserializeObject<CryptoAverage>(response.Content);
        return Math.Round(BTCAvg.BTCUSD.Last, 2);
    }

    //async method
    public async double GetBaselineAsync()
    {
        var Client = new RestClient();
        IRestResponse response;
        Client.BaseUrl = new Uri("https://apiv2.bitcoinaverage.com/indices/global/ticker/short?crypto=BTC&fiat=USD");
        CryptoAverage BTCAvg;
        var request = new RestRequest();
        response = await Client.ExecuteAsync(request);
        BTCAvg = JsonConvert.DeserializeObject<CryptoAverage>(response.Content);
        return Math.Round(BTCAvg.BTCUSD.Last, 2);
    }


2 commentaires

Ajoutez votre mise à jour comme une réponse


N'a pas réalisé que c'était une chose :). Fait.


3 Réponses :


1
votes

Si vous souhaitez utiliser le modèle ASYNC AWAIT EM>, vous devez déclarer la méthode de manière appropriée

await GetBaselineAsync();


1 commentaires

Merci pour la réponse rapide. Oui, le retard (léger bégaiement) est causé par l'appel de l'API. J'ai pu résoudre le problème (code édité ci-dessus).



1
votes

Si la bibliothèque que vous utilisez prend en charge les méthodes de synchronisation et d'asynchronisation (dernier généralement avec ASYNC suffixe), vous devez toujours utiliser des asynchronisations. ASYNC créera des threads distincts dans votre code afin de mieux performer. Et il fonctionnera simultanément quand il a besoin . Les méthodes asynchronisées devraient presque dans tous les cas de retour Task ou générique <> . Si vous souhaitez appeler une méthode asynchrone dans la méthode synchrone (en cas de signature de la méthode ne vous permet pas d'utiliser attendre mot-clé), vous devez utiliser .getawaiter (). GetResult (). sur une méthode qui renvoie tâche (dans ce cas, il bloquera le fil et ne fonctionnera pas simultanément). Google autour de cela pire pour passer du temps dessus. ASYNC AWAIT Le modèle était une énorme étape de C # comme langue


2 commentaires

Apprécier l'entrée. J'ai pu résoudre le problème (code ci-dessus). Je commence à comprendre l'importance et la puissance de l'asynchronisation et le coderez-le lorsque cela est possible!


@Sterlingz Je suis content que mon commentaire vous ait donné des idées. Acclamations!



0
votes

Edit: La solution consistait à modifier la déclaration à; xxx

et modifier exécuteasync sur exécuteTaskasync. Code complet; xxx


0 commentaires