MVC4 + async / await + возврат ответа до завершения действия
В моем приложении MVC4 мне нужно добавить контроллер для загрузки и обработки больших файлов. Сразу после загрузки файла мне нужно запустить асинхронную обработку этого файла и вернуть ответ браузеру, не дожидаясь завершения обработки.
Очевидно, что я мог бы запустить новый поток для обработки файла вручную, но мне интересно, смогу ли я реализовать этот сценарий, используя механизм async / await, представленный в .net 4.5
Чтобы проверить концепцию, я попробовал что-то вроде этого:
public async Task<ActionResult> Test()
{
TestAsync();
return View("Test");
}
public async void TestAsync()
{
await LongRunning();
}
private Task<int> LongRunning()
{
return Task<int>.Factory.StartNew(() => Pause());
}
private int Pause()
{
Thread.Sleep(10000);
return 3;
}
Похоже, что асинхронный механизм в целом работает: когда я отлаживаю код, я нажимаю кнопку «Return View (» Test »); строка перед строкой «возврат 3». Однако браузер получает ответ только после завершения метода Pause.
Кажется, это ведет себя как обычные асинхронные контроллеры (те, которые используют методы Async и Completed). Есть ли способ использовать async / await в контроллерах для моего сценария?