如何在另一个方法的变量中收集等待的方法的返回值
本文关键字:方法 等待 返回值 变量 另一个 | 更新日期: 2023-09-27 18:19:33
所以我试图从url中获取源代码,下面是我的代码:
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向控制台输出CCD_ 1而不是源代码。
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);
}