3

我有一种方法可以通过 HttpClient 提取一些 HTML,如下所示:

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;
}

我有另一种看起来像这样的方法:

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

我希望能够调用 GetHTMLDataAsync,然后在读取 html 后让它在 UI 线程上调用 HtmlReadComplete。我天真地认为这可以通过某种看起来像的东西来完成

GetHTMLDataAsync(url).ContinueWith(HtmlReadComplete);

但是,我无法使语法正确,我什至不确定这是处理它的适当方法。

提前致谢!

4

2 回答 2

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

甚至

public async void ProcessHTMLData(string url)
{
    HTMLReadComplete(await GetHTMLDataAsync(url));
}
于 2012-10-25T07:31:59.983 回答
1

你很接近,但ContinueWith()需要一个委托Task作为它的参数,所以你可以这样做:

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

通常,您应该小心与 withResult一起使用async,因为如果尚未完成,Result则会阻塞。Task但是在这种情况下,你肯定知道Task是完整的,你Result不会阻塞。

于 2012-10-27T17:16:18.343 回答