Почему я должен использовать асинхронный, а не асинхронный метод - PullRequest
0 голосов
/ 22 февраля 2019

Я не понимаю, я видел, что у .Net Framework есть много методов, которые имеют варианты async и non-async.

Мой вопрос заключается в том, какое преимущество дает asyncметод предоставит мне следующие ограничения: - я не получу Task.Result несколько раз одним и тем же методом
- я не использую CPU-bound заданий (Task.Run(...))

Я нахожусь вMVC контроллер и я хочу обработать post запрос:

 [HttPost]
 [Route(..)]
 public async Task DoSomething(MyModel model)
 {  
    var asyncResult=await NETMethodAsync(model); //PostAsync,WriteAsync....
    var nonAsyncResult= NETMethod(model); //Post,Write,....etc..
    return result;
 }

В этом случае я буду использовать result только один раз в моем методе, и я не буду требовать его несколько раз (где await только что дал бы мне выполненное задание-результат) какая разница?Я в основном создаю StateMachine в моем MethodAsync для чего?Я мог бы сделать операцию non-async быстрее, я полагаю.

Если я не делегирую метод на отдельном Task (как показано ниже), зачем мне использовать версию async?Я спрашиваю, потому что даже шаблоны MVC Controller по умолчанию обеспечивают все операции CRUD с использованием версий async.

Task tsk=Task.Run(async()=> await MethodAsync() );

PS В моем сценарии это то, что я пропустил. Быстрее ли использовать async (который внутренне раскручивает конечный автомат), чем не асинхронную версию?

1 Ответ

0 голосов
/ 22 февраля 2019

в чем разница?

Масштабируемость.В частности, синхронные методы блокируют вызывающий поток, а асинхронные методы - нет.

Что это означает (для приложения ASP.NET), что методы синхронного действия блокируют поток запроса на время запроса, и чтометоды асинхронного действия не блокируют этот поток.

Это, в свою очередь, обеспечивает большую масштабируемость.Поскольку пул потоков является ограниченным ресурсом (и, в частности, поскольку он имеет ограниченную скорость внедрения потоков), асинхронный код позволяет вашему приложению обрабатывать большую нагрузку с меньшим количеством потоков.

Для получения дополнительной информации см. «Синхронный».против асинхронной обработки запросов "в моей статье об асинхронном ASP.NET ;этот раздел статьи относится ко всем серверным технологиям, включая ASP.NET Core.Вы также можете проверить этот гист , который демонстрирует разницу в масштабируемости, ограничивая скорость роста пула потоков.Я не перенес этот пример в ASP.NET Core, но сделать это просто.

...