我正在研究一个示例app来查询api,我正在尝试将通用部分移动到QueryAsync中查询并返回Task。此函数将从控制器操作GetData调用,该操作也可以返回Task。在这里,我正在等待从QueryAsync中检索结果。我觉得这不是必需的,因为QueryAsync没有返回一个等待的对象。但是如果我不这样做,我将无法从GetData控制器返回ActionResult。我的思考和实施在这里是否正确?抱歉,我是新手使用Async和MVC。
private async Task<ActionResult> QueryAsync<T>(string url)
{
Task<string> response_task = HttpClientService.HttpClientService.GetRequest(url);
IEnumerable<T> model = JsonConvert.DeserializeObject<IEnumerable<T>>(await response_task);
return View(model);
}
//
// GET:
public async Task<ActionResult> GetData()
{
string _address = "https://someurl";
return await QueryAsync<ClassType>(_address);
}
答案 0 :(得分:1)
您正在从Task
返回一个等待QueryAsync
的{{1}},这是Task
&#34;异步&#34;运行GetRequest
,然后同步反序列化结果并返回ActionResult
。把这些操作想象成一个整体,挤进一个等待的任务。
从async / await API的角度来看,您的实现是正确的。您的实现等同于以下(忽略通用方法):
public async Task<ActionResult> GetData()
{
var url = "https://someurl";
var response = await HttpClientService.HttpClientService.GetRequest(url);
var model = JsonConvert.DeserializeObject<IEnumerable<ClassType>>(response);
return View(model);
}