我正在将用户添加到我的aspnetusers数据库中,并且工作正常。然后我也尝试将它们链接到现有角色。那是我收到错误的时候:"异步模块或处理程序在异步操作仍未完成时完成。"
以下是我的问题代码方法:
private async void checkOldDB(string email, string password)
{
bool isValidUser = false;
ReportsMvc.App_Code.BLL.FUN.cFunUser user = ReportsMvc.App_Code.DAL.FUN.cFunUserDB.getUser(email);
if (user != null)
{
isValidUser = PasswordHash.PasswordHash.ValidatePassword(password, user.Password);
if (!isValidUser)
{
isValidUser = PasswordHash.PasswordHash.ValidateHashes(password, user.Password);
}
}
if (isValidUser)
{
var user2 = new ApplicationUser { UserName = email, Email = email };
var result = await UserManager.CreateAsync(user2, password);
if (result.Succeeded)
{
string role = user.Role;
if (string.IsNullOrEmpty(role))
{
role = "User";
}
UserManager.AddToRole(user2.Id, role);
await SignInManager.SignInAsync(user2, isPersistent: false, rememberBrowser: false);
}
}
}
以"开头的行等待SignInManager"工作正常。然后,当我将该代码添加到AddToRole时,我开始收到上述错误。这个身份/认证的东西对我来说都很新鲜。
答案 0 :(得分:1)
您应该将async void
更改为async Task
,并将await
更改为您所在的位置。
作为一般规则,您应该避免async void
;它应该只用于事件处理程序。我在an MSDN article中对此进行了更多描述。