我了解异步工作原理以及它与JavaScript Promise的比较,但是我不确定像下面这样的一行代码有什么好处。
IdentityResult result = await UserManager.CreateAsync(user, model.password);
由于我们正在创建一个异步调用并立即等待线程,因此在异步调用完成之前,随后的行不会被执行。
我了解异步工作原理以及它与JavaScript Promise的比较,但是我不确定像下面这样的一行代码有什么好处。
IdentityResult result = await UserManager.CreateAsync(user, model.password);
由于我们正在创建一个异步调用并立即等待线程,因此在异步调用完成之前,随后的行不会被执行。
好处是,如果该操作确实是异步的,那么在某个时刻,调用线程将被释放以执行应用程序中的其他工作,而不是同步阻塞。
这种使用方式带来了更高的可扩展性。
在继续之前,您仍然需要等待操作完成。异步方法并不能神奇地运行得更快,但它们确实可能使用更少的资源,并且通常可以同时运行多个异步方法。
如果我们想象 CreateAsync
是这样的:
async Task<IdentityResult> CreateAsync()
{
// do something
await Task.Delay(1000);
// do something else
}
然后在 await Task.Delay(1000)
这里,你会释放一个线程并进行异步等待,而不是占用它一秒钟。该线程可以在您的进程中执行其他 CPU 操作,避免上下文切换。
如果 CreateAsync
实现正确,则会有一些实际的异步操作,而不是使用 Task.Delay
。
await
不会让 线程 等待,它只会让方法的其余部分等待。这就是整个意图! - Ant P