如何在 MVC4 中执行异步调用操作方法
Posted
技术标签:
【中文标题】如何在 MVC4 中执行异步调用操作方法【英文标题】:How to do an async call to action method in MVC4 【发布时间】:2017-04-25 17:12:19 【问题描述】:我这里有以下场景。 DB调用异步运行时如何进行一些并行处理。
/// <summary>
/// Async query EF6.0
/// </summary>
/// <returns></returns>
public async Task<ActionResult> AsyncQuery()
var result = await GetAsyncDepartments();
Debug.WriteLine("Do some stuff here");
return View("Index");
private async Task<List<Department>> GetAsyncDepartments()
var depts = new List<Department>();
using (var newContext = new DemoEntities())
depts = await newContext.Departments.ToListAsync();
Debug.WriteLine("Got departments");
return depts;
它实际上是在等待任务完成,然后进入语句“Do some stuff here”。
如何异步调用 GetAsyncDepartments() 并做一些额外的事情,直到调用返回。 谢谢。
【问题讨论】:
在需要使用之前不要await
结果。
【参考方案1】:
GetAsyncDepartments
将返回 Task
的实例,您可以在执行“一些人员”之后“等待”。
public async Task<ActionResult> AsyncQuery()
var task = GetAsyncDepartments();
Debug.WriteLine("Do some stuff here");
await task;
return View("Index");
【讨论】:
【参考方案2】:await
要求您的代码等待调用。您可以致电GetAsyncDepartments
,但只有在需要时才能获得结果await
。例如:
async Task Main()
var finalResult = await AsyncQuery();
Console.WriteLine(finalResult);
public async Task<int> AsyncQuery()
var result = GetAsyncDepartments();
Debug.WriteLine("Do some stuff here");
return await result;
public async Task<int> GetAsyncDepartments()
Console.WriteLine("Starting GetAsyncDepartments");
await Task.Delay(5000);
Console.WriteLine("Finished GetAsyncDepartments");
return 5;
产生输出:
启动 GetAsyncDepartments 在这里做一些事情 完成 GetAsyncDepartments 5
【讨论】:
感谢您的回答。这真的很解释。但是,我选择了其他答案只是因为所需的更改很少。以上是关于如何在 MVC4 中执行异步调用操作方法的主要内容,如果未能解决你的问题,请参考以下文章