能否在if条件语句中使用Task<bool>?

20

在 Windows Phone 8 中,我有一个名为 public async Task<bool> authentication() 的方法。该函数的返回类型是 bool,但当我尝试在 if 条件语句中使用其返回值时,错误提示显示无法将 Task<bool> 转换为 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;
}

1
不,你不能直接使用它,因为Task<bool>不是bool。你应该发布你实际遇到问题的代码,但你可能可以这样做:bool b = await authentication(); if(b) { ... } - Lee
你的“async”身份验证方法没有等待任何东西,所以它实际上不是异步的。 - Servy
2个回答

38
您函数的返回类型是 Task<bool>,而不是 bool。要获取结果,应使用 await 关键字:
bool result = await authentication();
您可以阅读此MSDN文章中的"What Happens in an Async Method"部分,以更好地理解async/await语言功能。

1

你需要 await 这个任务:

bool result = await authentication();

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

1
使用async/await时选择其中一种“替代方法”(Task.Wait()Task.Result)往往会导致死锁情况 - Scott Chamberlain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接