ASP.Net MVC在后台运行长期任务?

时间:2017-06-22 15:47:46

标签: .net asp.net-mvc asynchronous

我正在开发一个用ASP.Net MVC编写的Web应用程序,特别是一个处理文件上传的操作然后处理可能需要大约10分钟才能完成,但我想将控制权返回给用户文件到达服务器准备好处理后直接。我不需要向用户返回任何内容,只是没有发生错误。

我应该如何实现这一点,我最初的想法是异步还是某种队列?

1 个答案:

答案 0 :(得分:2)

首先,Web应用程序独特地不适合处理长时间运行的任务。 Web服务器具有有限数量的线程可供使用,并且它希望能够快速有效地处理请求。实际上,任何需要超过一秒的事情都应该被卸载到一个完全不同的过程,甚至可能是一个完全不同的服务器。

基本上,您需要做的是让您的Web应用程序只处理上传。它会将其保存为某个地方,然后安排稍后在该文件上执行的任务。然后它可以将响应返回给用户并继续前进。然后任务正在处理任务,并且在那时将完成需要执行的文件的实际操作。您可以使用许多不同的系统,但.NET世界中最受欢迎的可能是Hangfire。它有一个简单的客户端API,您可以使用它来安排任务,然后您可以编写一个控制台应用程序,Azure功能,无论如何,以实际执行任务。