在asp.net中异步运行方法

我有一个带有按钮的网页,该按钮可以生成一些文件到服务器路径。 (需要5到20分钟的时间)。 我想创建一个异步任务,即使在用户关闭浏览器后也会继续执行。 用asp.net 4和C#可以做到这一点吗?

您不能在asp.net应用程序中控制线程池。 您甚至无法保证请求将在它开始的同一个线程上完成。 创建线程使用与Web服务器使用的相同的应用程序池,并且您可以用尽所有请求线程,使您的Web服务器不可用于处理请求。

您应该实现一个承载WCF服务的Windows服务,您可以在Web应用程序中调用该服务。 在服务中,您可以启动一个线程来处理长时间运行的进程。 在该过程结束时,您可以更新状态标志(例如,从处理完成 ),用户可以查看该标志以确定文件是否已完成处理。

我建议使用Topshelf来实现你的Windows服务,这会让你头疼。

实际上,建议您不要这样做。 相反,推荐的方法是创建一个异步执行处理的服务(例如Windows服务)。 在Web应用程序中,您可以创建启动流程的方法,以及轮询服务以确定处理是否已完成的另一种方法。

这有很多原因,但最大的一个原因是Web服务器的默认和推荐配置允许服务器终止长时间运行的请求。

或者我不明白你想做什么,或者你不需要做任何事情。

发送请求后,无论用户浏览器是否关闭,请求过程都会继续。 你不需要做任何事情

无状态WEB应用程序的神奇本质……

创建新线程/使用线程池是创建失控任务的最简单方法。

请注意,无法确保进程在长时间任务期间保持活动状态 – 因此请准备好处理部分完成和手动重新启动。 即AppPoll由于配置更改而回收。

最简单的方法是将您的任务放在ThreadPool上。 即使在网页完成渲染之后,线程池线程也将保持活动状态。 代码如下所示:

/* Beginning Method */ object someData = new object(); ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessAsync), someData); /* Ending Method */ static void ProcessAsync(Object stateInfo) { string dataToString = stateInfo.ToString(); } 

你必须创建一个执行长时间运行任务的线程

看看下面的内容:

http://kiranpatils.wordpress.com/2010/01/01/performing-a-long-running-task-with-asp-net/

无论如何,即使用户关闭浏览器,您将继续在服务器上启动它(直到您回收应用程序池或重新启动Web服务器)。