C# 在ASP.NET MVC中嵌套异步/等待调用

C# 在ASP.NET MVC中嵌套异步/等待调用,c#,asp.net,asp.net-mvc,asynchronous,async-await,C#,Asp.net,Asp.net Mvc,Asynchronous,Async Await,我对ASP.NET MVC的async/await非常陌生,我有一个关于它的快速问题。我的问题是,对数据库的嵌套调用是否需要使用async/Wait?例如: UnitOfWork.cs public async Task CommitAsync() { await _context.SaveChangesAsync(); } AccountService.cs public async Task SaveLoginAttemptAsync(LoginAttempt loginAtte

我对ASP.NET MVC的async/await非常陌生,我有一个关于它的快速问题。我的问题是,对数据库的嵌套调用是否需要使用async/Wait?例如:

UnitOfWork.cs

public async Task CommitAsync()
{
     await _context.SaveChangesAsync();
}
AccountService.cs

public async Task SaveLoginAttemptAsync(LoginAttempt loginAttempt)
{
     _appContext.Repository<LoginAttempt>().Add(loginAttempt);
     await _appContext.UnitOfWork.CommitAsync();
}
由于端点使用async/await,AccountService.cs中SaveLoginAtterAsync上的async/await方法和AccountController.cs中的代码块是否必要


谢谢你的帮助

是的,使用async/await,一路走来都是海龟。否则会影响您的调试体验

从技术上讲,您可以跳过所有“更深层”返回的
wait
,因为您在该上下文中不依赖返回值。然而,你并不是真的想这么做


如果跳过wait并返回一个
任务
,那么在调试过程中,该方法将不会出现在调用堆栈中,因为它实际上是
等待它返回的任务,而不是方法本身中的代码。

是的,使用async/wait时,它一直是海龟。否则会影响您的调试体验

从技术上讲,您可以跳过所有“更深层”返回的
wait
,因为您在该上下文中不依赖返回值。然而,你并不是真的想这么做

如果跳过等待并返回
任务
,则在调试时,该方法将不在调用堆栈中,因为它实际上是
等待它返回的任务,而不是方法本身中的代码。

此外,在非UI代码(代码不在控制器中)上,所有等待的任务都应该调用
配置等待(false)
。此外,在非UI代码(代码不在控制器中)上,所有等待的任务都应该调用
ConfigureAwait(false)
//..
var attempt = new LoginAttempt()
{
    Email = User.Identity.GetEmail(),
    Logintime = DateTime.Now,
    Successful = successful ? "Y" : "N",
    IpAddress = Request.UserHostAddress,
    UserId = Convert.ToInt32(User.Identity.GetUserId())
 };
 await _accountService.SaveLoginAttemptAsync(attempt);
//..