我需要将此方法转换为异步方法。
public User GetUserByID(int id)
{
return _unitofwork.UserRepository.FindByCondition(u => u.Id == id).FirstOrDefault();
}
这就是我更改代码的方式。
public async Task<User> GetUserByID(int id)
{
return await _unitofwork.UserRepository.FindByCondition(u => u.Id == id).FirstOrDefault();
}
,但是.FirstOrDefault()
或.FirstOrDefaultAsync()
不能在那里使用。我只需要返回单个用户。谁能指出我正确的方向?
'Task<IEnumerable<User>>' does not contain a definition for 'FirstOrDefault' and no accessible extension method 'FirstOrDefault' accepting a first argument of type 'Task<IEnumerable<User>>' could be found (are you missing a using directive or an assembly reference?) [JobsPortal]
编辑-抱歉。我的严重错误。 我应该使用这样的代码。
public async Task<User> GetUserByID(int id)
{
return (await _unitofwork.UserRepository.FindByCondition(u => u.Id == id)).FirstOrDefault();
}
答案 0 :(得分:4)
FindByCondition
本身就是一个异步方法。
您只需要在其中添加一些括号即可,因此您可以在调用await
之前FindByCondition
FirstOrDefault()
的结果。
return (await _unitofwork.UserRepository.FindByCondition(u => u.Id == id)).FirstOrDefault();
您的处理方式是,尝试在FirstOrDefault
返回的Task
上调用FindByCondition
,而无需等待。