У меня есть стандартное неасинхронное действие, например:
[HttpPost]
public JsonResult StartGeneratePdf(int id)
{
PdfGenerator.Current.GenerateAsync(id);
return Json(null);
}
Идея в том, что я знаю, что это создание PDF может занять много времени, поэтому я просто запускаю задачу и возвращаюсь, не заботясь о результате асинхронной операции.
В приложении ASP.Net MVC 4 по умолчанию это дает мне это приятное исключение:
System.InvalidOperationException: в настоящее время невозможно запустить асинхронную операцию. Асинхронные операции можно запускать только в асинхронном обработчике или модуле или во время определенных событий в жизненном цикле страницы. Если это исключение возникло при выполнении Страницы, убедитесь, что Страница помечена как ‹%@ Page Async="true" %>.
Что совершенно не имеет отношения к моему сценарию. Глядя на это, я могу установить флаг в false, чтобы предотвратить это исключение:
<appSettings>
<!-- Allows throwaway async operations from MVC Controller actions -->
<add key="aspnet:AllowAsyncDuringSyncStages" value="true" />
</appSettings>
https://stackoverflow.com/a/15230973/176877
http://msdn.microsoft.com/en-us/library/hh975440.aspx
Но вопрос в том, есть ли вред, если запустить эту асинхронную операцию и забыть о ней из синхронного действия контроллера MVC? Все, что я могу найти, рекомендует сделать контроллер асинхронным, но это не то, что я ищу - в этом нет смысла, поскольку он всегда должен возвращаться немедленно.