web-dev-qa-db-ja.com

タイプ 'bool'を暗黙的に 'system.threading.tasks.task bool'に変換できません

私のサービスの実装コードで、「タイプ '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;
        }
    }
15
Peter

この操作を非同期で実行するかどうかを具体的に指定する必要があります。

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;
    }
}

注意: asyncおよびawaitは.net 4.5およびC#5.0以降と互換性があります

16
Ramy M. Mousa

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);
}
7
toddmo