从ASP.NET启动和停止线程

时间:2010-10-14 11:53:28

标签: c# asp.net multithreading wcf asynchronous

我必须启动一个线程在后台执行一些长时间运行的任务(即使浏览器已关闭),而不等待网页按钮点击事件的响应。

如果用户希望这样做,我还需要能够稍后停止。

我该怎么做?

是否可以将线程的id存储在数据库中并在以后中止?

我是否需要进行异步webservicewcf调用才能实现此目的?

如果需要,如何在以后停止长时间运行的任务?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我建议您的ASP.Net应用程序将请求写入数据库表,并使用Windows服务处理这些请求。

我会使用一个表来排队新任务,并使用一个单独的表来管理正在运行的任务。第二个表可用于报告进度或终止正在运行的任务。完成任务后,您可以将它们移动到第三个表格,并使用摘要数据进行后续分析。

数据库还为您提供持久性,因此如果服务器崩溃,Windows服务可以提供自动重启任务,而无需用户重新提交。

如果您有许多排队任务,您可以在多个应用程序服务器上生成Windows服务以加快速度,所有这些都通过数据库进行控制。

答案 1 :(得分:0)

您可以使用backgroundworker类:

实例化后台工作程序,定义DoWork事件处理程序和RunWorkerCompleted事件处理程序。然后使用RunWorkerAsync方法启动操作。您可以使用CancelAsync方法取消操作。

也许你可以在缓存或应用程序中存储对你的worker的引用(如果是特定于用户的话,可以在Session中),以便在需要取消时检索它。