async attendent pour un HttpClient.PostAsync appel
Je suis d'essayer d'envelopper un appel à PostAsync donc je n'ai pas de ré-encoder la séquence d'appel sur mon code de base. La question que je vais avoir est la HttpResponseMessage j'ai affecté à partir de l'appel n'est pas le même que celui de la consommation de mes appels de méthode. Voici le code:
internal class RestHttpClient
{
public HttpResponseMessage ResponseMessage = new HttpResponseMessage();
public async void SendRequest(string adaptiveUri, string xmlRequest)
{
using (HttpClient httpClient = new HttpClient())
{
StringContent httpConent = new StringContent(xmlRequest, Encoding.UTF8);
try
{
ResponseMessage = await httpClient.PostAsync(adaptiveUri, httpConent);
}
catch (Exception ex)
{
ResponseMessage.StatusCode = HttpStatusCode.InternalServerError;
ResponseMessage.ReasonPhrase = string.Format("RestHttpClient.SendRequest failed: {0}", ex);
}
}
}
}
Et je vais essayer d'appeler la méthode comme suit:
RestHttpClient restHttpClient = new RestHttpClient();
restHttpClient.SendRequest(adaptiveUri, xmlRequest);
return restHttpClient.ResponseMessage;
Quand je fais l'appel de la ResponseMessage objet contient toujours un statut Ok, même si ce n'est pas ce qui est effectivement retourné à partir de la PostAsync appel.
- Ce n'est pas un doublon. Cette question n'est pas de répondre à l'OP du tout un problème
- basée sur le titre, il se doit... mais il n'a pas... supprimé.
Vous devez vous connecter pour publier un commentaire.
La raison que vous voyez, c'est parce que votre méthode est
async void
qui s'exécute dans un "fire and forget" de la mode, de sorte que vous voyez la valeur retournée par la instansiation du message de la réponse, pas la réponse dePostAsync
.Ne l'exposez pas à une seule classe
HttpResponseMessage
, il peut être périmé si appelé en même temps sur la même instance. Au lieu de cela, renvoyer une nouvelle instance à chaque fois:Et quand vous l'appelez, bien
await
c':Type System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage> is not awaitable