Я немного запутался в передовых методах работы с C# и задачами.
Когда меня учили c# и задачам, это всегда была асинхронная функция, ожидающая задачи. Но недавно я провел небольшое исследование и нашел людей, которые говорят иначе. Они также говорят, что ограничение использования async и await может улучшить производительность и использование оперативной памяти.
Например, в этой записи Stackoverflow В нем говорится, что вы не должны всегда ждать каждую задачу, но пример не для ASP.NET API, и для получения новых данных не используются какие-либо предыдущие данные. Этот пост также выступает за то, чтобы не всегда ожидать каждая задача. Но опять же, пример — простая задача, которая выполняется.
Итак, мой вопрос для случаев, когда есть другая задача, на которой вторая задача должна ждать. Можете ли вы использовать .Result
или нам лучше использовать async/await. Потому что я слышал, что .Result
блокирует текущий поток. Но я не понимаю, как текущий поток не будет заблокирован ожиданием, поскольку вывод первого оператора необходим для второго оператора.
Пример без async/await
public Task<User> SaveUser(User user)
{
var dbUser = _userRepository.GetByUid(user.Id).Result;
if(dbUser == null) {
dbUser = new User();
dbUser.Id = Guid.NewGuid();
}
dbUser.Name = user.Name;
return _userRepository.Save(dbUser);
}
Пример с асинхронным/ожиданием
public async Task<User> SaveUser(User user)
{
var dbUser = await _userRepository.GetByUid(user.Id);
if(dbUser == null) {
dbUser = new User();
dbUser.Id = Guid.NewGuid();
}
dbUser.Name = user.Name;
return await _userRepository.Save(dbUser);
}
Примечание. Я также слышал, что при использовании пользовательского интерфейса важно, чтобы задачи, связанные с пользовательским интерфейсом, ожидались, но это будет для API.