我有一个方法可以通过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);
但是,我无法正确理解语法,也不确定这是否适合处理它。
提前致谢!
答案 0 :(得分:1)
public async void ProcessHTMLData(string url)
{
string HTMLData = await GetHTMLDataAsync(url);
HTMLReadComplete(HTMLData);
}
甚至
public async void ProcessHTMLData(string url)
{
HTMLReadComplete(await GetHTMLDataAsync(url));
}
答案 1 :(得分:1)
您已关闭,但ContinueWith()
以Task
作为参数接受委托,因此您可以执行以下操作:
GetHTMLDataAsync(url).ContinueWith(t => HtmlReadComplete(t.Result));
通常,您应该谨慎使用Result
和async
,因为Result
会阻止Task
尚未完成。但在这种情况下,您确定Task
已完成,Result
将无法阻止。