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 в контроллерах для моего сценария?

Ответы на вопрос(3)

Ваш ответ на вопрос