2017-01-18 9 views
2

나머지 API에 요청을 게시하는 동안 프로그램이 중단되고 스레드가 중단됩니다. 상담하십시오.스레드가 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; 
    } 

서버에 요청을 보내지 않으므로주의하십시오. 방법에 의해 _httpClient가

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

답변

2

다음과 같이 정의 될 것이다 나 자신에 의해 그림 그것을 밖으로는, PostAsync는 현재 스레드를 취소 다른 메소드를 호출 것을 알 수있다. 그래서 await 키워드를 삭제하고 최종 결과를 얻습니다.

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