2014-06-07 18 views
8

Tôi gặp lỗi này: "Không thể chuyển đổi hoàn toàn loại 'bool' thành 'system.threading.tasks.task bool'" trong triển khai dịch vụ của mình mã. Bạn có thể sửa mã của tôi được không.Không thể chuyển đổi hoàn toàn loại 'bool' thành '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; 
     } 
    } 

Trả lời

10

Bạn cần phải cụ thể cho dù bạn muốn hoạt động này xảy ra không đồng bộ hay không.

Như một ví dụ cho 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; 
    } 
} 

Nếu bạn không cần đến nó là một hoạt động Async, hãy thử này:

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

Lưu ý: asyncawait tương thích với .net 4.5 và C# 5.0 và nhiều hơn nữa

0

Nếu bạn thêm Task.FromResult, bạn có thể giả mạo nó vào biên dịch và làm việc ngay cả khi phương pháp của bạn không phải là async. Tôi đã phải làm điều này khi hooking lên danh tính, đó là tất cả async, đến một kết thúc trở lại di sản.

Ví dụ:

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

Thay vì sử dụng 'chờ Task.Delay (0);' và gây overhead với chi phí làm cho máy nhà nước async thay vì không sử dụng các từ khóa 'async' và làm ' trả về Task.FromResult (profile.EmailAddress.NullIfEmpty()! = null); ' –

+0

@ScottChamberlain oh. được. Sửa lỗi. – toddmo

Các vấn đề liên quan