Parse.com CurrentUser始终为null

时间:2015-11-30 00:14:33

标签: c# asynchronous parse-platform

最近我正在尝试用C#编写一些应用程序。我在我的iOS应用程序中使用了Parse.com,一切正常,我喜欢它。

现在我正在尝试使用也在使用Parse.com的C#编写ASP.NET Web应用程序。

似乎ParseUser.CurrentUser始终为null。在我的Controller中,我调用Model方法 - Login()然后使用CheckUser()来确定是否有人登录。

//Controller

public bool Index()
{
    LoginModel login = new LoginModel();
    Task t = Task.Run(() =>{
        login.Login();
    });
    t.Wait();
    return login.CheckUser();
}

在我的模型中,我有两种方法:

//Model

public async void Login()
{
    await ParseUser.LogInAsync("admin", "admin");
    Debug.WriteLine(ParseUser.CurrentUser.Username);//actually outputs username
}

public bool CheckUser()
{
    if (ParseUser.CurrentUser != null) //always says false
    {
        return true;
    }
    else
    {
        return false;
    }
}

似乎我的错误在于Index方法,并且可能与异步登录方法有关。我该如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

您不应该阻止异常代码,因为Stephen Cleary指出here

文章的要点是不同的任务处理模型使用不同的上下文。因此,当TPL尝试返回异步上下文时,它无法找到它。

此外,通过将异步调用包装在任务中并等待任务,并不意味着您也在等待包装的异步调用返回。

我会像这样重写Index方法:

public async Task<bool> Index()
{
    LoginModel login = new LoginModel();
    await login.Login();
    return login.CheckUser();
}