在我的 MVC4 应用程序中,我需要添加一个控制器来上传和处理大文件。文件上传后,我需要立即开始对该文件进行异步处理并将响应返回给浏览器,而无需等待处理完成。
显然我可以启动一个新线程来手动处理文件,但我想知道我是否可以使用 .net 4.5 引入的 async/await 机制来实现这个场景
为了测试这个概念,我尝试了这样的事情:
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");” “return 3”行之前的行。但是,浏览器仅在 Pause 方法完成后才会收到响应。
这似乎表现得像常规异步控制器(具有 Async 和 Completed 方法的控制器)。有没有办法在我的场景中使用控制器中的异步/等待?