MVC 4 Web Api: возвращение задач из действий - PullRequest
2 голосов
/ 19 марта 2012

Возможно, у меня в голове какая-то путаница, но я вижу некоторую путаницу в следующем:

  • Контроллеры Web API получены из класса ApiController, где основным методом является ExecuteAsync, которыйсделать запрос пройденным через канал фильтров и действий, возвращая Task в конце;
  • Действия веб-API поддерживают возможность возврата объекта типа Task, используя TPL или async / await.

Мой вопрос: действительно ли мне полезно создавать и запускать задачи в рамках действий API?Насколько я понимаю, цель вернуть потоки обратно в ASP.NET threadpool ASAP уже реализована инфраструктурой ApiController.ExecuteAsync, поэтому дополнительный уровень асинхронности мне ничего не дает (кроме случаев, когда мне нужно отменить задачу или выполнить операции в бэкэнде впараллельно).

Есть мысли?Спасибо.

1 Ответ

4 голосов
/ 19 марта 2012

Как и при любом параллельном программировании, ответ, к сожалению: полностью зависит от типа обработки, которую вы делаете.

Для начала среда выполнения ASP.NET уже обеспечивает параллелизм для каждого запроса. Поэтому, если работа, которую вы выполняете, полностью привязана к вычислениям, тогда использование асинхронности будет очень небольшим преимуществом. Исключением из этого правила является то, что данные, обрабатываемые вами в запросе, очень большие и, следовательно, выиграют от дальнейшего параллелизма.

Наиболее важные сценарии, в которых имеет значение , имеет смысл использовать асинхронно, когда вы выполняете любые операции ввода-вывода (дисковый ввод-вывод или сетевой ввод-вывод). ). Например, когда код вашего контроллера ASP.NET ...

  • связывается с другим бэкэнд-веб-сервисом
  • связывается с сервером базы данных
  • читает / записывает информацию о файле на диск

Вы хотите использовать асинхронность в этих случаях, потому что есть время ожидания при выполнении запросов ввода-вывода: задержка диска или сети. Используя async, вы освобождаете поток ЦП, который в противном случае был бы заблокирован, ожидая этих данных, чтобы он мог обрабатывать некоторые другие связанные с вычислениями работы.

...