2014-06-07 25 views
8

Mam ten błąd: "Nie można niejawnie przekonwertować typu" bool "na" system.threading.tasks.task bool "" w mojej implementacji usług kod. Czy możesz poprawić mój kod, proszę.Nie można niejawnie przekonwertować typu "bool" na "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; 
     } 
    } 

Odpowiedz

10

Należy określić, czy ta operacja ma się odbywać asynchronicznie, czy też nie.

Jako przykład 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; 
    } 
} 

Jeśli nie trzeba go będzie operacja asynchroniczny, spróbuj tego:

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

Uwaga: async i await są kompatybilne z .net 4.5 i C# 5.0 i więcej

0

Jeśli dodasz Task.FromResult, możesz go sfałszować, kompilując i działając, mimo że twoja metoda nie jest zgodna z async. Musiałem to zrobić, podłączając Tożsamość, która jest wszystkim async, do starszego zaplecza.

Przykład:

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

Zamiast 'czekają Task.Delay (0);' i powodując napowietrznych z kosztem dokonania stan maszyny asynchronicznej zamiast nie używać słowa kluczowego 'async' i zrobić' return Task.FromResult (profile.EmailAddress.NullIfEmpty()! = null); ' –

+0

@ScottChamberlain oh. ok. Naprawione. – toddmo

Powiązane problemy