Как преобразовать следующий метод в асинхронный метод? - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужно преобразовать этот метод в асинхронный метод.

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 голосов
/ 18 декабря 2018

Похоже, FindByCondition сам по себе является асинхронным методом.

Вам просто нужны дополнительные скобки, чтобы вы await получили результат FindByCondition, прежде чем вызывать FirstOrDefault().

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

Как у вас было, пытался позвонить FirstOrDefault на Task, возвращенном из FindByCondition, не дожидаясь его.

...