为什么asp.net Identity api中的所有数据库访问方法都标记为async ?



考虑下面这个简单的伪代码

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方法完成了它正在做的事情后,执行将从您等待它的位置恢复。如果你不等待,它就像同步方法。

相关内容

  • 没有找到相关文章

最新更新