早期访问ASP.NET MVC中的异步操作结果

时间:2014-02-22 08:34:11

标签: c# asp.net asp.net-mvc async-await asp.net-mvc-5

当我们在MVC中使用异步操作时,如下例所示,发布模型数据在10秒内可用(此处为1秒)?我很困惑,如何在1秒内获得数据在获取数据时需要10秒???

例如:

    public async Task<ActionResult> GetPosts()
    {

        // ...
        IPost posts = await PostService.GetPosts();// assume this take 10 seconds
        // ...

        return View(model: posts);//BUT we return in 1 second! How posts model available in view for show to the user earlier than 10 seconds?
    }

1 个答案:

答案 0 :(得分:7)

您无法在1秒内到达return语句。一旦到达尚未完成的第一个Task<ActionResult>表达式,该方法就会返回await。在异步方法 到达return语句之前,该任务将无法完成(因此无法获得结果)。

但是当你正在等待的第一件事完成时,你的异步方法将会恢复,从它停止的地方继续,直到下一次等待,它将再次“进入睡眠状态”(但不会阻塞一个线程)直到等待已经完成等等。

这就是异步的本质。您只需区分“异步方法已返回任务”(快速发生)和“异步方法已完成”(通常不会快速发生)。

很难在几个段落中彻底描述异步 - 我建议你阅读一本好书,观看视频或阅读一个好的教程。 MSDN是一个很好的起点。