【问题标题】:How to do an async call to action method in MVC4如何在 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结果。

标签: c# asp.net-mvc-4 asynchronous entity-framework-6 task-parallel-library


【解决方案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

    【讨论】:

    • 感谢您的回答。这真的很解释。但是,我选择了其他答案只是因为所需的更改很少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2014-04-10
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多