如何让Windows Server重启时等待ASP.NET异步后台线程执行完成
IIS后台线程跨场景等待适配问题
已实现适配能力
- 完成了对应功能改造,在IIS应用程序池回收、应用程序池关停场景下,可实现IIS等待后台线程执行完毕的逻辑,解决了半数相关问题
现存问题与目标诉求
- 当前方案在Windows Server重启场景下完全失效:系统仅为后台线程预留30秒执行时间,超时后会直接强制终止工作进程
- 预期目标:找到可落地的实现方案,让系统暂停关机流程,直至所有后台线程执行完毕。已知普通Windows进程本身就支持延后关机能力,说明该能力在Windows系统层面是可实现的,大概率是IIS/ASP.NET的运行机制阻碍了方案落地
相关说明:我们清楚ASP.NET并非承载后台线程的最优框架,也知晓可通过在重启前先执行
iisreset规避该问题,但服务器的重启操作往往不在我们的掌控范围内。
现有实现代码
public class BackgroundRunner : IRegisteredObject { public BackgroundRunner() { // 方案1:基于IRegisteredObject接口实现 HostingEnvironment.RegisterObject(this); // 方案2:绑定的事件触发时间比方案1早1秒 typeof(HostingEnvironment).GetEvent("StopListening").AddEventHandler(null, new EventHandler((object sender, EventArgs e) => { FinishUp(); })); } public void Stop(bool immediate) { FinishUp(); HostingEnvironment.UnregisterObject(this); } }
内容的提问来源于stack exchange,提问作者RoofShrubbery
相关产品推荐
相关产品推荐

