理解异步和等待

3

我正在尝试学习MVC5的细节,遇到了一些让我困惑的东西。在使用单独身份验证的MVC5项目中自带的accountController中,异步登录和注册方法中有这样一行代码:

var result = await UserManager.CreateAsync(user, model.Password);

我在这里读到 http://msdn.microsoft.com/en-us/library/hh191443.aspx,这是一种正常的做法,但我不明白为什么你要在同一行中使用异步方法和等待(await)。难道直接在这里使用相同参数的.Create方法不更有意义吗?

https://dev59.com/r2855IYBdhLWcg3w-JQr - maxbeaudoin
https://dev59.com/y2855IYBdhLWcg3w-JXR?rq=1 - maxbeaudoin
我从第二篇帖子中得到的信息是它将启动一个新线程来执行.CreateAsync而不是使用当前线程。是这样吗?这样做有什么真正的价值吗? - esastincy
1
没有新的线程参与,它只是更好地利用当前的线程。请参阅 https://dev59.com/v2Ik5IYBdhLWcg3wp_mM。 - maxbeaudoin
谢谢您,解释得非常清楚。 - esastincy
1个回答

2
< p > SomeMethod()await SomeMethodAsync()之间的区别在于,后者在方法执行IO时不会阻塞线程。因此,应用程序变得更具可扩展性,因为它可以使用较少的线程来处理相同数量的请求。

如果您不关心可扩展性,则两个选项都没有太大关系。但是,最好使用异步版本,以使您的应用程序在可扩展性成为问题时表现良好,从而保证应用程序未来的可持续性。


这只有在存在同步上下文的情况下才有效,对吧? - Paulo Morgado
1
@PauloMorgado async-await 也可以在没有同步上下文的情况下工作。在这种情况下,继续运行在线程池上。 - svick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接