2016-06-18 2 views
0

이렇게 잠시 동안 괴롭힘을당했습니다. 왜 내 HTTP 응답 메시지 단계를 Visual Studio 디버거에서 건너 뛸 지 잘 모르겠습니다. 현재 가지고있는 코드입니다.비동기 HTTP 응답 메시지

public async void APIcall()   
{     
    HttpClient httpClient = new HttpClient(); 
    HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://xxxx"); 
    requestMessage.Headers.Add("Accept", "application/json"); 
    requestMessage.Headers.Add("ContentType", "application/json"); 
    requestMessage.Headers.Add("RequestMessageGUID", "xxxxxx"); 
    HttpResponseMessage response = await httpClient.SendAsync(requestMessage); 
    string result = await response.Content.ReadAsStringAsync(); 
    Console.WriteLine(result); 
    Console.ReadLine(); 
} 

제안 사항을 해결하고 문제를 해결하십시오.

답변

0

먼저 이벤트 처리기가 아닌 한 void 개의 메소드에서 async을 수행하지 마십시오. 아무것도 반환하지 않는 경우에도 Task을 사용하십시오.

다음은 항상 귀하의 요청에 따라 콘텐츠를 얻을 것으로 가정합니다.

당신은 당신이 당신의 예외가 잡힐하지 않을 무효 방법에 비동기를 사용할 때

을 얻을 수있는 무언가가 있다는 것을 먼저 확인해야합니다. 그것이 아마 당신이 말한 것처럼 계속 건너 뛰는 이유 일 것입니다. 아마도 오류 일 것입니다.

private static HttpClient httpClient = new HttpClient(); 
public async Task APIcall() { 
    try { 
     HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://xxxx"); 
     requestMessage.Headers.Add("Accept", "application/json"); 
     requestMessage.Headers.Add("ContentType", "application/json"); 
     requestMessage.Headers.Add("RequestMessageGUID", "xxxxxx"); 
     HttpResponseMessage response = await httpClient.SendAsync(requestMessage); 
     if (response.Content.Headers.ContentLength.GetValueOrDefault() > 0) { 
      string result = await response.Content.ReadAsStringAsync(); 
      Console.WriteLine(result); 
     } else { 
      Console.WriteLine(response.StatusCode); 
     } 
    } catch(Exception ex) { 
     Console.WriteLine(ex.Message); 
    } 
    Console.ReadLine(); 
} 
관련 문제