在我们的 ASP.Net Core Web API 中,我们已经习惯Hosted Services
了执行一些后台任务。有时这些后台任务可能需要很长时间才能完成(大约一个小时)。除非有长时间运行的任务,否则一切都可以无缝运行。
IIS 应用程序池的空闲超时默认值为 20 分钟。因此,当 20 分钟没有请求时,IIS 会重新启动应用程序池。但有时后台任务可能正在运行并且 IIS 重新启动,而不管它是否导致任务突然终止而没有将其标记为完成。IIS 启动后,托管服务启动处理再次拾取任务。但在完成之前,IIS 会重新启动,这可能会一直持续下去。当存在可能多次发送同一电子邮件的电子邮件发送任务时,这可能会导致很多问题。
由于托管服务是 ASP.NET Core 的一等公民,如果 IIS 在执行空闲超时时也考虑后台执行,那将是理想的。
现在我们通过将 Idle Timeout 设置为 0 来解决这个问题,这样它就不会超时。这是一种 hacky 解决方案。此外,在动态添加和删除节点的负载平衡环境中,这不是一个可行的选择。
有没有更好的方法来“防止 IIS 在后台执行过程中重新启动”?
谢谢