2017-01-18 1 views
2

Alors que je poste la demande à l'api de repos, le programme va planter et le thread a été abandonné se produira. s'il vous plaît conseil.Thread a avorté problème dans httpClient.PostAsync

public async Task<TResponse> Post<TRequest, TResponse>(string method, TRequest request) 
    { 
      JsonMediaTypeFormatter jsonFormat = new JsonMediaTypeFormatter 
      { 
       SerializerSettings = 
       { 
        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore, 
        NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, 
        PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None 
       } 
      }; 

      var response = await _httpClient.PostAsync(_baseUrl + method, request, jsonFormat); 
      var finalResponse = await response.Content.ReadAsAsync<TResponse>(); 

      return finalResponse; 
    } 

Veuillez noter qu'aucune demande ne sera envoyée au serveur. par la façon dont le _httpClient sera défini comme ci-dessous

 _httpClient = 
      new HttpClient(new HttpClientHandler 
       { 
        AutomaticDecompression = 
         System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate 
       }) 
       {Timeout = TimeSpan.FromSeconds(50)}; 
     _httpClient.DefaultRequestHeaders.Add("Authorization", "apikey " + apiKey); 

Répondre

2

Je le découvrir par moi-même, se avère que PostAsync appellera une autre méthode qui annule le thread courant. J'ai donc supprimé le mot-clé await et obtenu le résultat final.

var response = _httpClient.PostAsync(_baseUrl + method, request, jsonFormat).Result;