Azure App Service中用户触发的并发后台线程丢失问题求助
Azure App Service后台任务丢失/异常退出的核心原因
你遇到的问题并非ASP.NET对后台线程的垃圾回收导致,本质是Azure App Service的应用生命周期管理机制和沙箱环境限制造成的,具体原因如下:
应用空闲超时回收:Azure App Service默认配置下,Web应用如果连续20分钟没有收到外部请求,会自动进入休眠状态并回收进程。此时所有运行中的后台任务会被直接终止,不会触发任何异常捕获逻辑。即使你使用
IHostedService、BackgroundService或Quartz,只要进程被回收,任务都会中断。定期/触发式应用回收:Azure会定期(通常每天一次)对应用池进行回收操作,另外当应用的资源占用过高、配置变更、部署新版本或平台更新时,也会触发进程回收。这种回收是强制终止进程,进程内的所有线程(包括后台任务线程)会被立即停止,没有机会执行
try/catch里的清理代码。沙箱环境运行限制:Azure App Service的沙箱环境对应用的运行有严格约束,尤其是免费/共享层:
- 对于长时间运行的任务,沙箱会监控进程的持续运行时间,超过阈值(比如免费层最长允许任务运行10分钟)会强制终止进程;
- 即使是标准/高级层,虽然没有明确的运行时间限制,但如果后台任务持续占用资源,也可能被平台判定为异常进程而终止。
WebJobs的共享生命周期问题:WebJobs默认与对应的Web App共享同一个应用池,当Web App进程被回收时,WebJobs也会被一并终止。即使是独立的连续WebJobs,依然受Azure的应用回收机制和沙箱限制影响,无法保证长时间任务的持续运行。
内容的提问来源于stack exchange,提问作者Coruscate5
相关产品推荐
相关产品推荐

