考虑下面这个简单的伪代码
User logs in
Application access database to try retrieve the login using provided password and username
if record is found then show requested page otherwise display login with error message
异步有什么好处?当然,在数据库搜索完记录之前,应用程序无法继续。
这是关于async-await
的更一般的问题。以这种方式执行的方法不会阻塞正在执行的线程,当DB返回结果时,应用程序可以做其他工作。这意味着您的应用程序可以在等待DB返回结果的同时处理其他请求(可能来自其他用户)。
关于async-await
已经写了很多。您可以从这里开始:http://blogs.msdn.com/b/cdndevs/archive/2013/12/18/c-async-and-await-why-do-we-need-them-part-1.aspx
并且,仅供参考,Identity库具有作为扩展方法提供的非异步方法。所以,如果你的应用是非异步的,你不必在应用中一直使用async
关键字。
在数据库搜索记录并找到结果并且请求完成处理之前,响应不能返回给请求者,这一点是正确的。
然而,通过使数据访问异步将允许请求线程被释放并返回到线程池以服务其他请求,并且当数据操作稍后完成时,可以从线程池中取出请求线程并继续处理其余请求。通过这种方式,请求线程在等待DB操作时不会被阻止执行其他有用的工作,因为如果方法是同步的。
不知道有问题的API,但你可以等待异步方法。而等待"其他代码"继续执行。当async方法完成了它正在做的事情后,执行将从您等待它的位置恢复。如果你不等待,它就像同步方法。