无法隐式转换类型' bool' to&system ;thread.tasks.task bool'

时间:2014-06-07 13:11:06

标签: c# sql linq wcf

我有这样的错误:“不能在我的服务实现代码中隐式地将类型'bool'转换为'system.threading.tasks.task bool'”。你能纠正我的代码吗?

public Task<bool> login(string usn, string pwd)
    {
        DataClasses1DataContext auth = new DataClasses1DataContext();
        var message = from p in auth.Users
                      where p.usrName == usn && p.usrPass == pwd
                      select p;
        if (message.Count() > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

2 个答案:

答案 0 :(得分:15)

您需要具体说明是否希望此操作是异步发生的。

作为Async Operation的示例:

public async Task<bool> login(string usn, string pwd)
{
    DataClasses1DataContext auth = new DataClasses1DataContext();
    var message = await (from p in auth.Users
                  where p.usrName == usn && p.usrPass == pwd
                  select p);
    if (message.Count() > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

如果您不需要将其作为异步操作,请尝试以下操作:

public bool login(string usn, string pwd)
{
    DataClasses1DataContext auth = new DataClasses1DataContext();
    var message = from p in auth.Users
                  where p.usrName == usn && p.usrPass == pwd
                  select p;
    if (message.Count() > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

注意:asyncawait与.net 4.5和C#5.0及更多

兼容

答案 1 :(得分:5)

如果您添加Task.FromResult,即使您的方法不是async,也可以伪造它进行编译和工作。在将Identity(全部是async)连接到传统后端时,我必须这样做。

示例:

public override Task<bool> IsEmailConfirmedAsync(string userId)
{
  var profile = UserProfileType.FetchUserProfile(AtlasBusinessObject.ClientId.ToString(), decimal.Parse(userId));
  Task.FromResult(profile.EmailAddress.NullIfEmpty() != null);
}