在我的MVC4应用程序中,我需要添加一个控制器来上传和处理大文件。在文件上传后,我需要立即开始异步处理该文件,并在不等待处理完成的情况下向浏览器返回响应。
显然,我可以手动启动一个新线程来处理文件,但我想知道是否可以使用.net 4.5引入的异步/等待机制来实现此场景。
为了测试这个概念,我尝试了类似于以下内容的代码:
显然,我可以手动启动一个新线程来处理文件,但我想知道是否可以使用.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 3"这一行之前我会命中"return View("Test");" 。然而,浏览器只有在Pause方法完成后才接收到响应。
这似乎像是常规的异步控制器(具有Async和Completed方法)。是否有一种方法能够在我的情况下在控制器中使用异步/等待?
LongRunning
应该在自己的线程中执行吧?Thread.Sleep
会让当前线程休眠,也就是执行该操作的线程。 - Matt Greer