我正在尝试从异步方法中获取一个字符串,该方法以任务字符串类型返回一个字符串
我的代码:
class DataScraper
{
private static readonly HttpClient client = new HttpClient();
public static async Task<string> getParagraph()
{
string subject1 = "";
string subject2 = "";
Dictionary<string, string> parameters = new Dictionary<string, string>()
{
{ "Subject1", subject1 },
{ "Subject2", subject2 }
};
try
{
string result = await PostHTTPRequestAsync("http://watchout4snakes.com/wo4snakes/Random/RandomParagraph", parameters);
return await Task.FromResult(result);
}
catch (Exception ex)
{
return ex.Message;
}
}
private static async Task<string> PostHTTPRequestAsync(string url, Dictionary<string, string> data)
{
using (HttpContent formContent = new FormUrlEncodedContent(data))
using (HttpResponseMessage response = await client.PostAsync(url, formContent).ConfigureAwait(false))
{
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
}
}
当在另一个类中使用它时,如下所示:
string s = DataScraper.getParagraph();
我收到一个错误,上面写着:
Cannot implicitly convert type 'System.Threading.Tasks.Task<string>' to 'string'
您的getParagraph
方法的返回类型为Task<string>
,与PostHTTPRequestAsync
的返回类型相同,因此您可以尝试使用await
(与string result = await PostHTTPRequestAsync(...)
中的方法相同(来处理它:
string s = await DataScraper.getParagraph();
也不需要将结果封装到await Task.FromResult
中,return result
应该可以正常工作。
此外,您还可以在文档中阅读更多使用async和wait的异步编程。