如何在后台执行代码?
可以启动一个后台线程(或线程池上的任务)并在此期间重定向用户。但是,不能保证任务在重定向请求到达时已经完成。你需要它吗?它只是“整理”,还是需要在显示结果之前完成处理?
请注意,我不认为有什么可以阻止AppDomain
在线程正在做它的事情时被垃圾收集......您可能想要将长时间运行的任务分离为单独的服务 - 请求发出请求到该服务,然后重定向用户。如果您具有请求的ID概念,则可以将其作为参数包含在重定向URL中,然后在重定向请求进入时检查服务是否已完成处理任务。
所以,如果我创建一个web服务而不是一个线程,调用服务并重定向用户,服务仍然会被执行?我不需要在执行完成时向用户发送任何响应,我只需要在不让用户等待的情况下执行它。 – ShadowG
@ShadowG:您希望使webservice本身很快返回,但添加一个作业到队列,或类似的东西。 –
这取决于昂贵的操作的结果是否影响用户在下一页上看到的内容。或者,您可以使用ajax在页面加载后执行处理。
BackgroundWorker,如果你不擅长维护自己的主题,那么做得很好。
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
旋转应用程序池上的新线程。 – N0Alias