【问题标题】:Is it possible to use Task<bool> in if conditions?是否可以在 if 条件下使用 Task<bool> ?
【发布时间】:2014-06-09 23:24:14
【问题描述】:

在 Windows Phone 8 中,我有方法 public async Task&lt;bool&gt; authentication()。该函数的返回类型是bool,但是当我尝试在if 条件错误中使用它的返回值时,提示无法将Task&lt;bool&gt; 转换为bool

public async Task<bool> authentication()
{
    var pairs = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string> ("user", _username),
        new KeyValuePair<string, string> ("password", _password)
    };

    var serverData = serverConnection.connect("login.php", pairs);

    RootObject json = JsonConvert.DeserializeObject<RootObject>(await serverData);

    if (json.logined != "false")
    {
        _firsname = json.data.firsname;
        _lastname = json.data.lastname;
        _id = json.data.id;
        _phone = json.data.phone;
        _ProfilePic = json.data.profilePic;
        _thumbnail = json.data.thumbnail;
        _email = json.data.email;
        return true;
    }
    else
        return false;
}

【问题讨论】:

  • 不,你不能直接使用它,因为Task&lt;bool&gt; 不是bool。您应该发布您实际遇到问题的代码,但您可能可以这样做bool b = await authentication(); if(b) { ... }
  • 您的“异步”身份验证方法不会等待任何内容,因此它实际上不是异步的

标签: c# windows-phone-8 task-parallel-library async-await c#-5.0


【解决方案1】:

您的函数的返回类型是Task&lt;bool&gt;,而不是bool 本身。要得到结果,你应该使用await关键字:

bool result = await authentication();

您可以阅读此MSDN article“异步方法中发生的情况”部分,以进一步了解async / await 语言功能。

【讨论】:

    【解决方案2】:

    你需要await任务:

    bool result = await authentication();
    

    或者,您可以使用自己喜欢的替代方法等待Task

    【讨论】:

    • 使用 async/await 选择“替代方法”之一(Task.Wait()Task.Result)通常会导致 deadlock situations
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2021-09-02
    相关资源
    最近更新 更多