ASP.NETMVC是否在后台长时间运行任务?

ASP.NETMVC是否在后台长时间运行任务?,.net,asp.net-mvc,asynchronous,.net,Asp.net Mvc,Asynchronous,我正在开发一个用ASP.NETMVC编写的web应用程序,特别是一个处理文件上传的操作,然后处理这些文件可能需要大约10分钟才能完成,但是我希望在文件到达服务器准备处理后立即将控制权交还给用户。我不需要向用户返回任何东西,只是没有发生错误 我最初的想法是异步的或某种队列的,我该如何实现这一点呢?首先也是最重要的,web应用程序不适合处理长时间运行的任务。web服务器有有限数量的线程可供使用,它希望能够快速高效地处理请求。任何超过一秒钟的时间都应该被转移到一个完全不同的进程,甚至可能是一个完全不同

我正在开发一个用ASP.NETMVC编写的web应用程序,特别是一个处理文件上传的操作,然后处理这些文件可能需要大约10分钟才能完成,但是我希望在文件到达服务器准备处理后立即将控制权交还给用户。我不需要向用户返回任何东西,只是没有发生错误


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

首先也是最重要的,web应用程序不适合处理长时间运行的任务。web服务器有有限数量的线程可供使用,它希望能够快速高效地处理请求。任何超过一秒钟的时间都应该被转移到一个完全不同的进程,甚至可能是一个完全不同的服务器上


基本上,您需要做的是让您的web应用程序处理上传。它会将其保存为“在某处”,然后计划稍后在该文件上执行的任务。然后,它可以将响应返回给用户并继续。然后,任务将被处理它的任何人拾取,需要执行的文件的实际操作将在此时完成。您可以使用许多不同的系统,但在.NET世界中最流行的可能是Hangfire。它有一个简单的客户端API,您可以使用它来安排任务,然后您可以编写控制台应用程序Azure function等来实际执行任务。

首先,web应用程序非常不适合处理长时间运行的任务。web服务器有有限数量的线程可供使用,它希望能够快速高效地处理请求。任何超过一秒钟的时间都应该被转移到一个完全不同的进程,甚至可能是一个完全不同的服务器上


基本上,您需要做的是让您的web应用程序处理上传。它会将其保存为“在某处”,然后计划稍后在该文件上执行的任务。然后,它可以将响应返回给用户并继续。然后,任务将被处理它的任何人拾取,需要执行的文件的实际操作将在此时完成。您可以使用许多不同的系统,但在.NET世界中最流行的可能是Hangfire。它有一个简单的客户端API,您可以使用它来安排任务,然后您可以编写控制台应用程序Azure function等来实际执行任务。

Async与此无关。常见的误解:异步仅在线程有一段等待时间(即闲置)时才有用。如果您实际上是在线程上执行工作,那么async基本上是作为sync运行的,只是开销更大。此外,无论是否异步,在所有操作完成之前都无法返回响应。这与背景不同。@Alex Google结果是根据用户自定义的,因此OP可能不会得到与您相同的结果。事实上,在“匿名”窗口中,它不在我的前五名结果中。@Alex我不确定你不明白“你的谷歌结果可能与其他人不同”的哪一部分。@Alex在“匿名”窗口中,我从你那里得到了不同的结果。这并不复杂。“事实上,在一个匿名窗口中,它不在我的前五名结果中。”@Alex问题在于,当他的结果可能与你的结果不同,因为你的结果与我的结果不同时,“这是谷歌的第一个结果”。当我可以证明不同的结果很容易得到时,这些排名有什么相关性?异步与此无关。常见的误解:异步仅在线程有一段等待时间(即闲置)时才有用。如果您实际上是在线程上执行工作,那么async基本上是作为sync运行的,只是开销更大。此外,无论是否异步,在所有操作完成之前都无法返回响应。这与背景不同。@Alex Google结果是根据用户自定义的,因此OP可能不会得到与您相同的结果。事实上,在“匿名”窗口中,它不在我的前五名结果中。@Alex我不确定你不明白“你的谷歌结果可能与其他人不同”的哪一部分。@Alex在“匿名”窗口中,我从你那里得到了不同的结果。这并不复杂。“事实上,在一个匿名窗口中,它不在我的前五名结果中。”@Alex问题在于,当他的结果可能与你的结果不同,因为你的结果与我的结果不同时,“这是谷歌的第一个结果”。当我能证明不同的结果很容易得到时,这些排名有什么相关性?嗨,克里斯,谢谢你的回答。这正是我想要的,我想我掉进了误解异步的陷阱。嗨,克里斯,谢谢你的回复。这正是我想要的,我想我掉进了误解异步的陷阱。