1
我正在研究一個示例應用程序來查詢api,我試圖將通用塊移動到查詢並同時返回任務的QueryAsync。該函數將從控制器動作GetData中調用,它可以返回任務。在這裏,我正在等待從QueryAsync中檢索結果。我覺得它不是必需的,因爲QueryAsync沒有返回一個等待對象。但是如果我不這樣做,我將無法從GetData控制器返回ActionResult。我的思想和實施是否正確?對不起,但我是使用MVC異步的新手。無法從調用異步方法的控制器返回ActionResult
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);
}
是的,我可以改變它這樣,但我確實需要到位的泛型方法,所以我可以傳遞任何類類型。我的問題是,有沒有一種方法可以從GetData方法返回ActionResult,並且仍然是異步的,因爲反正我不是'返回'等待數據,而是'View(model)'。我希望你在這裏理解我的關注。 – Sam 2014-08-28 18:59:06
您正在返回一個等待數據,因爲'View(model)'依賴於'model','model'依賴於反序列化操作,這依賴於GetRequest異步結果。沒有'GetRequest'的結果,就沒有'model',因此沒有'ActionResult'返回。 – mostruash 2014-08-28 19:02:49
請參閱'GetData'必須等待'View(model)'被構造。這是等待的。我不知道如何解釋這一點,除了await/async API之外,您還需要對異步操作有所瞭解。例如在Javascript中看到異步的東西。 – mostruash 2014-08-28 19:06:56