c# - Parse.com CurrentUser 始终为 null

标签 c# asynchronous parse-platform

最近我正在尝试用 C# 编写一些应用程序。我在一些 iOS 应用程序中使用了 Parse.com,一切都运行良好,我很喜欢它。

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

似乎 ParseUser.CurrentUser 始终为 null。在我的 Controller 中,我调用模型方法 - 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>

最佳答案

正如 Stephen Cleary 指出的那样,您不应该阻止异步代码 here

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

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

我会像这样重写 Index 方法:

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

关于c# - Parse.com CurrentUser 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989732/

相关文章:

c# - 使用委托(delegate)处理错误

c# - 从 C# 调用 PowerShell

c# - 如何在 C# 中只显示 int 的一部分(比如截掉信用卡号的一部分)

C# 多个任务在调用行上被阻止

ios - 在解析iOS中搜索1000多个查询

c# - 让我登录以进行 Windows + 表单登录

javascript - 如何知道窗口 "load"事件是否已经触发

javascript - 如何在 then 中添加延迟以 promise

jquery - Bootstrap 需要 JQuery(使用 Express 和 Parse)

ios - 在 Parse 数据浏览器中隐藏字符串值