我有这样的错误:“不能在我的服务实现代码中隐式地将类型'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;
}
}
答案 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;
}
}
注意:的
async
和await
与.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);
}