11 votes

HttpClient GetAsync indique toujours 'WaitingForActivation'.

Je suis nouveau à HttpClient. Mon code ci-dessous indique toujours "WaitingForActivation" dans le statut. Merci de m'aider

private static async Task<HttpResponseMessage> MakeCall()
{
    var httpclient = new HttpClient();

    var response = await httpclient.GetAsync("http://localhost:60565/Subscribers");

    return response;
}

15voto

JDandChips Points 557

Alternativement, si votre environnement est synchrone, ajoutez .Result comme suit :

GetAsync("http://localhost:60565/Subscribers").Result;

3voto

Stephen Cleary Points 91731

C'est normal. Juste await la tâche renvoyée pour attendre (de manière asynchrone) qu'elle se termine.

Vous pouvez trouver mon intro à async utiles.

1voto

Alex_P Points 1520

Comme Cleary l'a écrit dans son article, pour créer un appel asynchrone, votre tâche doit également être attendue. Cela signifie que la méthode de votre question ( MakeCall() ) est asynchrone, mais l'appel à la méthode est probablement synchrone.

Une classe d'exemple asynchrone :

using System.Threading.Tasks;

public class SampleClass
{
  public async Task<string> MakeCall()
  {
    # I am using the asynchronous call from the HttpClient library
    var response = await client.PostAsJsonAsync(url, creds)
    ...
  }
}

Essayez d'attendre l'appel à la méthode.

var makeCall = await SampleClass.MakeCall();

Ce que j'éviterais, c'est d'utiliser .Result . Comme JDandChips l'indique déjà, cela rend votre appel à nouveau synchrone. Dans ce cas, cependant, il n'est pas nécessaire d'essayer de le rendre asynchrone en premier lieu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X