Я немного узнал об асинхронном ожидании и думаю, что понимаю его до некоторой степени. Я знаю, что они используются, чтобы избежать блокировки пользовательского интерфейса, и в основном используются в операциях ввода-вывода, таких как БД или доступ к файлам.
Сейчас я пытаюсь реорганизовать несколько методов действия MVC, чтобы они были асинхронными. Хотя доступ к БД имеет смысл (например, ToListAsync () EF), у меня возникли проблемы с генерацией модели представления и с тем, как (или если) она должна быть асинхронной.
Учитывая, что у меня был такой метод (я полагаю, довольно стандартный способ в MVC):
public PartialViewResult DoSomething()
{
var dataFromDb = _dataService.GetSomeData();
var viewModel = Data2DataViewModel(dataFromDb);
return PartialView("_SomePartialView", viewModel);
}
Я могу изменить его на:
public async Task<PartialViewResult> DoSomethingAsync()
{
var dataFromDb = await _dataService.GetSomeDataAsync();
var viewModel = Data2DataViewModel(dataFromDb);
return PartialView("_SomePartialView", viewModel);
}
Это хорошо, но вот мой вопрос:
мой метод Data2DataViewModel
также должен быть асинхронным?
И если да: как бы это нужно было реализовать, если это в основном код типа
public ViewModel Data2DataViewModel(DataFromDB dataFromDb)
{
DataViewModel result = new DataViewModel()
{
Prop1 = dataFromDb.Prop,
Prop2 = dataFromDb.SomeOtherProp
};
return result;
}
В общем, это не более чем получение загруженных данных из БД и заполнение свойств виртуальной машины. Таким образом, никакие операции ввода-вывода не участвуют.
Насколько я понимаю, только операции ввода-вывода должны быть асинхронными, поскольку они действительно могут блокировать пользовательский интерфейс.
Но 90% процентов моих операций с БД в моем приложении занимает менее 0,5 с, поэтому я начинаю задумываться о том, действительно ли создание асинхронных методов даст мне какой-то импульс, и действительно ли мое понимание и мышление имеют какой-то смысл.
Все ответы приветствуются!