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

时间:2014-07-06 11:18:16

标签: asp.net async-await asp.net-identity

考虑这个简单的伪代码

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

如何从异步中获益?当然,在数据库搜索记录之前,应用程序无法继续。

3 个答案:

答案 0 :(得分:6)

这是关于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

而且,FYI,Identity库具有作为扩展方法提供的非异步方法。因此,如果您的应用程序是非同步的,那么您不必在应用程序中一直使用async个关键字。

答案 1 :(得分:2)

您需要更正的是,在数据库搜索到记录并找到结果并且请求已完成处理之前,无法将响应返回给请求者。

通过使数据访问异步,但是将允许释放请求线程并返回到线程池以服务其他请求,并且当数据操作稍后完成时,可以从线程池中获取请求线程并继续其余的要求。

通过这种方式,在等待数据库操作时,不会阻止请求线程执行其他有用的工作,就像方法是同步的一样。

答案 2 :(得分:0)

不知道有问题的API,但您可以等待异步方法。在等待"其他代码"继续执行。在异步方法完成之后,执行什么操作,执行从您等待它的点恢复。如果你没有等待,它就像同步方法一样。