c# - 为什么 SignInAsync 是异步的?

标签 c# asp.net-mvc asynchronous asp.net-identity

在新的 Identity 模板代码中,登录用户的 Controller 代码被包裹在 async block 中:

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() 
                                   { IsPersistent = isPersistent }, 
                                    await user.GenerateUserIdentityAsync(UserManager));
}

但所有对 SignInAsync 的调用都只是等待任务完成。那么使登录代码异步的额外开销和复杂性有什么意义呢?还是创建模板的人可能已经设想了某种异步登录场景,这仍然是一个谜?

编辑:好的,我的问题似乎有些困惑。让我们试试这个:

当对函数的所有调用实际上是同步的时,为什么要创建异步 SignInAsync 函数:

await SignInAsync()

如果调用者在 awaiting 之前做了一些其他工作,异步函数就有意义,但事实并非如此......

最佳答案

Why create an asynchronous SignInAsync function when all of the calls to the function are effectively synchronous

你这样说,然后给出一个异步调用的例子。

所以,我认为混淆是关于同步顺序 之间的区别。考虑有问题的代码:

await SignInAsync();

这是一个异步调用。它所在的方法将被顺序评估,因为它会立即等待返回的任务,但这不会使其同步。它仍然是异步的。

您可以将“顺序”视为“一次一步”;这与一次做多件事的“并发”形成对比。 “异步”可以表示“在不阻塞的情况下执行某些操作”,而“同步”表示“在操作期间使用调用线程”。

Async 和 await 启用异步顺序代码(以及异步并发代码,如果您使用类似 Task.WhenAll 的代码)。

关于c# - 为什么 SignInAsync 是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901598/

相关文章:

c# - 在哪里放置 WPF 动态控件创建代码

css - IIS 7 和字体 awesome .woff 404 错误

asp.net-mvc - 无法通过本地 IIS 进行 Windows 身份验证

javascript - MVC View 中的字 rune 字过多

java - 异步Java : How to return this without blocking?

c# - 在 C# 中异步解析 CSV 文件的最佳方法是什么

c# - 如何使用 System.Speech

c# - 如何向查找字段添加值?

java - 采用 C# 或 Java 的 Adob​​e In-Design

java - 无法使用vertx创建文件