我必须启动一个线程在后台执行一些长时间运行的任务(即使浏览器已关闭),而不等待网页按钮点击事件的响应。
如果用户希望这样做,我还需要能够稍后停止。
我该怎么做?
是否可以将线程的id
存储在数据库中并在以后中止?
我是否需要进行异步webservice
或wcf
调用才能实现此目的?
如果需要,如何在以后停止长时间运行的任务?
提前致谢。
答案 0 :(得分:2)
我建议您的ASP.Net应用程序将请求写入数据库表,并使用Windows服务处理这些请求。
我会使用一个表来排队新任务,并使用一个单独的表来管理正在运行的任务。第二个表可用于报告进度或终止正在运行的任务。完成任务后,您可以将它们移动到第三个表格,并使用摘要数据进行后续分析。
数据库还为您提供持久性,因此如果服务器崩溃,Windows服务可以提供自动重启任务,而无需用户重新提交。
如果您有许多排队任务,您可以在多个应用程序服务器上生成Windows服务以加快速度,所有这些都通过数据库进行控制。
答案 1 :(得分:0)
您可以使用backgroundworker类:
实例化后台工作程序,定义DoWork事件处理程序和RunWorkerCompleted事件处理程序。然后使用RunWorkerAsync方法启动操作。您可以使用CancelAsync方法取消操作。
也许你可以在缓存或应用程序中存储对你的worker的引用(如果是特定于用户的话,可以在Session中),以便在需要取消时检索它。