usermanager.addtorole - 在异步操作仍处于挂起状态时完成的异步模块或处理程序

时间:2014-11-14 15:58:04

标签: asp.net authentication asp.net-identity

我正在将用户添加到我的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时,我开始收到上述错误。这个身份/认证的东西对我来说都很新鲜。

1 个答案:

答案 0 :(得分:1)

您应该将async void更改为async Task,并将await更改为您所在的位置。

作为一般规则,您应该避免async void;它应该只用于事件处理程序。我在an MSDN article中对此进行了更多描述。