我正在研究用于查询api的示例应用程序,并且试图将通用部分移动到查询并返回Task的QueryAsync中。该函数将从控制器动作GetData调用,该动作也可以返回Task。在这里,我正在等待从QueryAsync检索结果。我觉得这不是必需的,因为QueryAsync不返回等待对象。但是,如果我不这样做,我将无法从GetData控制器返回ActionResult。我的想法和实现在这里正确吗?抱歉,但是我不熟悉将MVC与Async结合使用。
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);
}
您正在返回一个awaitableTask
从QueryAsync
,这是一个Task
说,“异步”的运行GetRequest
,然后同步反序列化的结果并返回ActionResult
。将这些操作视为一个整体,将其压缩到一个等待的任务中。
从异步/等待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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句