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); }
3 Réponses :
Si vous souhaitez utiliser le modèle ASYNC AWAIT EM>, vous devez déclarer la méthode de manière appropriée await GetBaselineAsync();
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).
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 Task code> ou générique
<> code>. 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 code> mot-clé), vous devez utiliser
.getawaiter (). GetResult (). code> sur une méthode qui renvoie
tâche code> (dans ce cas, il bloquera le fil et ne fonctionnera pas simultanément). Google autour de cela pire pour passer du temps dessus.
ASYNC CODE>
AWAIT CODE> Le modèle était une énorme étape de C # comme langue p>
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!
Edit: La solution consistait à modifier la déclaration à; et modifier exécuteasync sur exécuteTaskasync. Code complet; p>
Ajoutez votre mise à jour comme une réponse
N'a pas réalisé que c'était une chose :). Fait.