所以我试图从网址中获取源代码,这是我的代码:
public async Task<string> grabPageHtml(Uri pageUrl)
{
var request = WebRequest.Create(pageUrl) as HttpWebRequest;
request.Method = "GET";
WebResponse responseObject = await Task<WebResponse>.Factory.FromAsync(
request.BeginGetResponse,
request.EndGetResponse, request);
var responseStream = responseObject.GetResponseStream();
var sr = new StreamReader(responseStream);
received = sr.ReadToEndAsync().Result;
return received;
}
代码正常工作并返回源代码。问题是在另一个方法中将“received”分配给字符串变量。
试过这个:
string pageHtml = grabPageHtml(pageUrl)
但是pageHtml将System.Threading.Tasks.Task'1[System.String]
输出到控制台而不是源代码。
答案 0 :(得分:3)
pageHtml输出System.Threading.Tasks.Task1 [System.String]`到 控制台而不是源代码。
这是因为您的方法返回Task<string>
,而不是string
。你需要以某种方式提取字符串结果。它应该是:
public async Task FooAsync()
{
string pageHtml = await GrabPageHtmlAsync(pageUrl);
Console.WriteLine(pageHtml);
}
作为旁注,不要阻止异步代码。使用Task.Result
可能会导致死锁。此外,使用HttpClient
会使您的代码更清晰,无需调用FromAsync
:
public Task<string> GrabPageHtmlAsync(Uri pageUrl)
{
var httpClient = new HttpClient();
return httpClient.GetStringAsync(pageUrl);
}