C# 如何在MVC4中异步调用action方法
我有下面的场景。如何在DB调用异步运行时进行一些并行处理C# 如何在MVC4中异步调用action方法,c#,asp.net-mvc-4,asynchronous,entity-framework-6,task-parallel-library,C#,Asp.net Mvc 4,Asynchronous,Entity Framework 6,Task Parallel Library,我有下面的场景。如何在DB调用异步运行时进行一些并行处理 /// <summary> /// Async query EF6.0 /// </summary> /// <returns></returns> public async Task<ActionResult> AsyncQuery() { var result = await GetAsyncDepartments();
/// <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;
}
//
///异步查询EF6.0
///
///
公共异步任务AsyncQuery()
{
var result=等待GetAsyncDepartments();
WriteLine(“在这里做一些事情”);
返回视图(“索引”);
}
专用异步任务GetAsyncDepartments()
{
var depts=新列表();
使用(var newContext=newdemoEntities())
{
depts=wait newContext.Departments.toListSync();
}
Debug.WriteLine(“Got部门”);
返回部门;
}
它实际上是等待任务完成,然后转到语句“在这里做一些事情”
如何异步调用GetAsyncDepartments()并执行一些额外的操作,直到调用返回。
谢谢。
GetAsyncDepartments
将返回任务的实例,您可以在执行“某些人员”后“等待”
public async Task<ActionResult> AsyncQuery()
{
var task = GetAsyncDepartments();
Debug.WriteLine("Do some stuff here");
await task;
return View("Index");
}
公共异步任务AsyncQuery()
{
var task=GetAsyncDepartments();
WriteLine(“在这里做一些事情”);
等待任务;
返回视图(“索引”);
}
wait
要求您的代码等待呼叫。您可以调用GetAsyncDepartments
,但只有在需要时才等待结果。例如:
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;
}
async Task Main()
{
var finalResult=等待异步查询();
控制台写入线(最终结果);
}
公共异步任务AsyncQuery()
{
var result=GetAsyncDepartments();
WriteLine(“在这里做一些事情”);
返回等待结果;
}
公共异步任务GetAsyncDepartments()
{
Console.WriteLine(“启动GetAsyncDepartments”);
等待任务。延迟(5000);
Console.WriteLine(“完成的GetAsyncDepartments”);
返回5;
}
生成输出:
正在启动GetAsyncDepartments
在这里做些事情
已完成GetAsyncDepartments
五,
不要等待结果,直到你需要使用它。谢谢你的回答。这真是解释性的。然而,我选择了另一个答案,只是因为所需的更改很少。