当我们在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秒钟内进入return
语句。该方法在到达尚未完成的第一个Task<ActionResult>
表达式后立即返回await
。在异步方法到达return
语句之前,该任务将不会完成(因此您无法获得其结果)。
但是,当您等待的第一件事完成时,您的异步方法将恢复,从中断的地方一直继续到下一次等待,然后它将再次“进入睡眠”状态(但不阻塞线程),直到等待完成为止,等等
这就是异步的本质。您只需要区分“异步方法已返回任务”(快速发生)和“异步方法已完成”(通常不会很快发生)之间的区别。
仅用几段时间就很难完全描述异步-我建议您读一本好书,观看一个视频或阅读一本好教程。 MSDN是一个很好的起点。
关于c# - 提前访问异步操作会导致ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21951851/