C# 如何在MVC4中异步调用action方法

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();

我有下面的场景。如何在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;
    }
//
///异步查询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
五,


不要等待结果,直到你需要使用它。谢谢你的回答。这真是解释性的。然而,我选择了另一个答案,只是因为所需的更改很少。