Должны ли не-IO методы (например, при создании моделей просмотра) быть асинхронными? - PullRequest
2 голосов
/ 25 июня 2019

Я немного узнал об асинхронном ожидании и думаю, что понимаю его до некоторой степени. Я знаю, что они используются, чтобы избежать блокировки пользовательского интерфейса, и в основном используются в операциях ввода-вывода, таких как БД или доступ к файлам. Сейчас я пытаюсь реорганизовать несколько методов действия 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 с, поэтому я начинаю задумываться о том, действительно ли создание асинхронных методов даст мне какой-то импульс, и действительно ли мое понимание и мышление имеют какой-то смысл. Все ответы приветствуются!

1 Ответ

1 голос
/ 25 июня 2019

используется для предотвращения блокировки пользовательского интерфейса

Для приложений с графическим интерфейсом async - хороший способ избежать блокировки потока пользовательского интерфейса.Для приложений ASP.NET (например, кода, который вы разместили), async используется для большей масштабируемости;нет потока пользовательского интерфейса, чтобы разблокировать.См. async ASP.NET для получения дополнительной информации, в частности, во втором абзаце под заголовком «Асинхронный код не является серебряной пулей».

должен ли мой метод Data2DataViewModel также работать с помощью async?

Этот метод выполняет какие-либо асинхронные операции?Если это так, он должен быть асинхронным.Если нет, то он должен быть синхронным.

он ничего не делает, кроме как берет загруженные данные из БД и заполняет свойства ВМ.Поэтому операции ввода-вывода не выполняются.

Копирование свойств является чисто синхронным, поэтому метод должен быть синхронным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...