首页 > 解决方案 > System.Web.HttpApplication 中的夜间事件?它在一段时间后关闭,不执行定时事件

问题描述

在 System.Web.HttpApplication 中,我希望有一个夜间活动,自动发送电子邮件或更新其他内容。旧系统为此使用 System.Threading.Timer,如下所示。但是,应用程序在不活动一段时间后关闭。

我试图添加一个计时器作为心跳,但这取决于外部的动作。

现在我正在寻找一种方法来让我的应用程序保持活力,或者“唤醒它”,这样我就可以在夜间进行活动。还是应该在再次调用“lastRun”时检查它?只需检查当天是否完成了事情,如果是现在,现在就做,或者设置一个未来几分钟的计时器

有任何想法吗?

public class WebApiApplication : System.Web.HttpApplication
    {
        ~WebApiApplication()
        {
            try
            {
                Log.Information("Closing WebApiApplication");
            }
            catch (Exception e)
            {
            }
        }

        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);

            //Add Serilog
            string logFileName = HostingEnvironment.MapPath(@"~/new_" + DateTime.Now.ToString("yyyyMMdd") + ".log");
            Log.Logger = new LoggerConfiguration()
                .WriteTo.File(
                    path: logFileName,
                    retainedFileCountLimit: 7,
                    shared: true,
                    rollingInterval: RollingInterval.Day,
                    rollOnFileSizeLimit: true,
                    fileSizeLimitBytes: 123456,
                    flushToDiskInterval: TimeSpan.FromSeconds(5))
                .CreateLogger();
            Log.Information("Starting Serilog #1");

           TimeSpan timeToGo = .....
           int intervalInHours = 24;
           var timer = new Timer(x =>
                {
                    task.Invoke();
                }, null, timeToGo, TimeSpan.FromHours(intervalInHours));
           
           // idea for replacemnt - is this the best way?
           if(lastRunDay < today)
           {
                DoEvents(...)
           }
        }
    }

标签: c#web-applications

解决方案


推荐阅读