【发布时间】:2011-01-06 17:13:46
【问题描述】:
我有一个 ASP.Net 应用程序,它使用 ThreadPool.QueueUserWorkItem() 触发一些后台工作人员。大多数情况下,运行的后台线程为零,但有时可能一次执行多达 5-6 个。此外,大多数将在几秒钟内完成,但它们可能会运行长达 10 分钟。
考虑到可能导致 ASP.Net 应用程序关闭的所有不同情况,如果可能,我希望这些后台进程在应用程序需要关闭并且它们正在处理中时正常退出。
我预计创建一种方法来通知进程提前停止工作并在接到应用程序正在关闭的呼叫后几秒钟内进行清理不会有太多问题。虽然如果有人对此有具体建议,我当然会很感激。
我的两个主要问题是:
1) 什么时候是告诉后台工作人员收拾东西的合适时间。在 Application_End 期间?处置()?或者也许是我不知道的第三种选择。
2) 如果我在上述事件期间等待进程完成后再返回,是否存在不立即返回 Application_End 可能会导致应用程序出现比不关闭后台作业更严重的问题。
void Application_End(object sender, EventArgs e)
{
//if this for whatever reason takes a non-trivial time to execute, what problems could I encounter?
SignalBackgroundJobsAndWaitForThemToShutDown();
}
谢谢!
【问题讨论】:
标签: c# asp.net multithreading application-lifecycle