【问题标题】:Cannot implicitly convert type 'bool' to 'system.threading.tasks.task bool'无法将类型“bool”隐式转换为“system.threading.tasks.task bool”
【发布时间】:2014-06-07 13:11:06
【问题描述】:

我的服务实现代码中有此错误:“无法将类型 '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;
        }
    }

【问题讨论】:

    标签: c# sql linq wcf


    【解决方案1】:

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

    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 等兼容

    【讨论】:

      【解决方案2】:

      如果您添加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);
      }
      

      【讨论】:

      • 不要使用 await Task.Delay(0); 并以制造异步状态机的成本导致开销,而不是使用 async 关键字并执行 return Task.FromResult(profile.EmailAddress.NullIfEmpty() != null);
      • @ScottChamberlain 哦。好的。修好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多