我有一个 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();
}
谢谢!