C# MVC长时间运行的EF存储过程调用
我想知道通过ASP.NET MVC 3用户界面触发长时间/正在运行的存储过程调用的简单而有效的方法是什么,该用户界面立即返回web UI,用户“允许”关闭浏览器并稍后再次检查 我真的不想只为此创建windows服务,我正在考虑使用C# MVC长时间运行的EF存储过程调用,c#,.net,asp.net-mvc,entity-framework,C#,.net,Asp.net Mvc,Entity Framework,我想知道通过ASP.NET MVC 3用户界面触发长时间/正在运行的存储过程调用的简单而有效的方法是什么,该用户界面立即返回web UI,用户“允许”关闭浏览器并稍后再次检查 我真的不想只为此创建windows服务,我正在考虑使用线程池。QueueUserWorkItem方法,回收甚至不会是一个大问题,应用程序也不会处于重载状态,这是一个内部WebUI,我们正在制作它以简化一些维护任务 是否有人尝试了ThreadPool.QueueUserWorkItem方法,并使用应用程序缓存或类似的方式来持
线程池。QueueUserWorkItem
方法,回收甚至不会是一个大问题,应用程序也不会处于重载状态,这是一个内部WebUI,我们正在制作它以简化一些维护任务
是否有人尝试了
ThreadPool.QueueUserWorkItem
方法,并使用应用程序缓存或类似的方式来持久化存储过程调用的状态,如“正在执行”或“已完成”?任何进入ThreadPool.QueueUserWorkItem队列的内容都会将资源窃取到ASP.NET请求处理队列中。如果您计划运行许多长时间运行的任务,那么您应该使用不同的线程/线程池。如果只是偶尔一次,那么这肯定是一个可行的解决方案
在任何情况下,请记住,您无法从web请求外部访问应用程序缓存/会话,因此您必须找到另一种方法来保存任务的状态。您应该研究托管任务。通过这种方法,您可以通过http调用直接将此web服务请求插入异步队列 为了使服务更易于从UI使用,您可以 您可以直接从javascript发布到REST服务,利用Microsoft提供的开箱即用队列技术,而不必处理多线程
您还可以使用Microsoft提供的、现成的解决方案 您可以使用ansyncController,UI几乎可以立即返回。在回调时,您可以存储特定用户的通知