2012-10-25 3 views
3

나는 HttpClient를 그렇게 등을 통하여 일부 HTML 끌어 방법이 : 내가 좋아하는 것 Task.ContinueWIth로 비동기 메서드 콜백?

private void HtmlReadComplete(string data) 
{ 
    // do something with the data 
} 

이 GetHTMLDataAsync를 호출 할 수 다음 수 :

public static HttpClient web = new HttpClient(); 
public static async Task<string> GetHTMLDataAsync(string url) 
{      
    string responseBodyAsText = ""; 
    try 
    { 
     HttpResponseMessage response = await web.GetAsync(url); 
     response.EnsureSuccessStatusCode(); 
     responseBodyAsText = await response.Content.ReadAsStringAsync(); 
    } 
    catch (Exception e) 
    { 
     // Error handling 
    } 

    return responseBodyAsText; 
} 

을 나는 같은 보이는 다른 방법이 HTML을 읽을 때 UI 스레드에서 HtmlReadComplete를 호출해야합니다. 나는 순진하게도 나는 구문이 올 수 없으며, 심지어 확인하십시오 그것을 처리 할 수있는 적절한 방법입니다 수 없습니다,이 어떻게 든

GetHTMLDataAsync(url).ContinueWith(HtmlReadComplete); 

처럼 보이는 뭔가 함께 할 수 있다고 생각하지만.

미리 감사드립니다.

답변

1
public async void ProcessHTMLData(string url) 
{ 
    string HTMLData = await GetHTMLDataAsync(url); 
    HTMLReadComplete(HTMLData); 
} 

또는

public async void ProcessHTMLData(string url) 
{ 
    HTMLReadComplete(await GetHTMLDataAsync(url)); 
} 
+0

물론. 너무 명백해서 나는 그것을 보지 못했다! 고맙습니다. – user1142433

1

당신은 가까운,하지만 당신이 할 수 있도록, 그 매개 변수로 Task와 대리인을 ContinueWith()

GetHTMLDataAsync(url).ContinueWith(t => HtmlReadComplete(t.Result)); 

보통을, 당신은 조심해야한다 Resultasync과 함께 사용하면 Task이 아직 완료되지 않은 경우 Result이 차단되므로 그러나이 경우 Task이 완료되었음을 알면 Result은 차단되지 않습니다.