我想使用Parse Library验证用户。
以下是我希望将其设为asyc的方法,因为api call仅支持异步调用。我是MVC和aysc / await功能的新手。 现在的问题是它进入await方法并且永远不会返回结果并且视图无法加载。
我花了很多时间了解并试图使用不同的选项,但还没有成功。
我是否需要使用Partialviews,或者可以在ValidateUser方法中执行某些操作。 任何示例代码都非常感谢。 谢谢。
AccountController.cs
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
var loggedIn = true;
}
return View(model);
}
ParseMembershipProvider:ExtendedMembershipProvider
public override bool ValidateUser(string username, string password)
{
var pUserRepo = new PUserRepository();
bool flag = false;
var requiredUser = pUserRepo.GetUserObjByUserName(username, password );
if (requiredUser.Result != null)
flag = true;
return flag;
}
PUserRepository.cs
public async Task<ParseUser> GetUserObjByUserName(string userName, string passWord)
{
return await ParseUser.LogInAsync("test1", "test123");
}
答案 0 :(得分:4)
由于Result
I explain on my blog,您看到了死锁情况。
不幸的是,会员提供商还没有({1}}知道。因此,请尝试在async
方法中使用ConfigureAwait(false)
:
async
(与您拥有的任何其他public async Task<ParseUser> GetUserObjByUserName(string userName, string passWord)
{
return await ParseUser.LogInAsync("test1", "test123").ConfigureAwait(false);
}
方法相同)。
答案 1 :(得分:3)
解决方案
return Task.Run(() => ParseUser.LogInAsync(userName, passWord)).Result;
所以基本上我有围绕异步方法调用的同步包装器。我从article了解到,它还取决于Parse库中的函数如何使用await或configureawait(false)。