在后台运行一个任务

5
我需要一段能够在后台运行任务的代码块。假设用户点击“提交”按钮,那么一个任务将在后台开始运行,在此期间,用户关闭了那个窗口并运行了不同的任务,该任务应继续运行。
请提供ASP.NET和VB.NET方面的帮助。
非常感谢您的帮助。
5个回答

5
您可以查看ThreadPool.QueueUserWorkItem方法,它允许您在线程池中运行某些方法。如果是长时间运行的任务,您也可以使用Thread类手动创建新线程,以避免危及线程池中的线程,线程池包含有限数量的线程,并且还用于处理ASP.NET应用程序中的请求。请参考:ThreadPool.QueueUserWorkItemThread

但是,如果会话终止,长时间运行的作业会发生什么情况?线程不会随之关闭吗? - Patrick
@ Patrick,不,线程与会话无关。它们与AppDomain相关,只要IIS保持应用程序加载,它们就会运行。另一方面,如果IIS卸载应用程序池,线程也将停止运行。 - Darin Dimitrov
那么启动一个线程可能无法解决这个问题,这取决于正在执行的作业的生命周期?您知道应用程序在被 IIS 关闭之前需要多长时间吗? - Patrick
1
由于您无法直接控制Web应用程序的生命周期,因此后台线程通常不是一个好主意。如果工作很简短,并且您可以接受在完成之前有可能被终止而不会丢失数据的情况下进行操作,那么可以使用后台线程,但否则我建议将该工作实现为服务,并以某种方式与该服务通信以指示需要新的工作。 - Lasse V. Karlsen

4
你可以创建一个托管WCF服务的Windows服务,当用户单击提交按钮时,可以将请求发送到Windows服务,并且即使用户关闭窗口,Windows服务也会在后台运行。

1

BackgroundWorker 可能是最容易入手的地方。将您的代码放在 DoWork 事件中。


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接