如何将HttpClient与async/await一起正确使用
本文关键字:一起 await HttpClient async | 更新日期: 2023-09-27 18:00:06
以下代码出现两个错误:
public async Task<string> TestDownloadTask()
{
HttpResponseMessage response = null;
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(@"https://api.nasa.gov/planetary/apod");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response.EnsureSuccessStatusCode();
response = await client.GetStringAsync("?concept_tags=True&api_key=DEMO_KEY");
}
return response.Content;
}
我得到:
- 无法等待"await"行上的"System.Threading.Tasks.Task"
- 无法将表达式类型"System.Net.Http.Content"转换为返回类型"string"
我一直在尝试编写上面的代码,从web服务下载字符串,但关于如何使用async和wait以及如何使用HttpClient,似乎有很多相互矛盾的信息,我不知道我编写的代码出了什么问题。
我哪里出了问题?我应该怎么做?
此方法client.GetStringAsync
返回Task<string>
public Task<string> TestDownloadTask()
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(@"https://api.nasa.gov/planetary/apod");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// You don't need await here
return client.GetStringAsync("?concept_tags=True&api_key=DEMO_KEY");
}
}
使用以上功能:
public async void SomeMethod()
{
// await to get string content
string mystring = await TestDownloadTask();
}
更改为
return await client.GetStringAsync("?concept_tags=True&api_key=DEMO_KEY");
或
return await response.Content.ReadAsStringAsync();