如何将以下方法转换为异步方法?

时间:2018-12-18 05:18:53

标签: c# asp.net .net entity-framework repository-pattern

我需要将此方法转换为异步方法。

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

1 个答案:

答案 0 :(得分:4)

FindByCondition本身就是一个异步方法。

您只需要在其中添加一些括号即可,因此您可以在调用await之前FindByCondition FirstOrDefault()的结果。

return (await _unitofwork.UserRepository.FindByCondition(u => u.Id == id)).FirstOrDefault();

您的处理方式是,尝试在FirstOrDefault返回的Task上调用FindByCondition,而无需等待。