在C#上每X天执行一次的线程-ASP.NET

时间:2018-08-05 12:13:40

标签: c# asp.net multithreading

基本上,我要做的是创建一个在给定天数内执行的线程,该天数可以更改。关键是应该定期发送电子邮件,尽管我知道这绝对不是最好的解决方案之一,但我正在寻找最好的方法,但是我必须继续按照要求进行操作,因此我不能使用Windows服务,Windows Scheduler或任何类似的工具。因此,发送此电子邮件的开始日期是应用程序启动时,然后下一次应该是在web.config中指定的X天之后。问题是如果应用程序停止,我不知道如何跟踪(我可以在数据库中保存应用程序的开始日期),但是下一次执行的天数可能会改变。这是我到目前为止所做的:

 private async Task<int> EmailScheduler()
    {
        var day = DateTime.Now.Day; //day when app starts
        while (true)
        {
            var currentTime = DateTime.Now;
            if (currentTime.Day == day)
            {
                SendEmail("mailto", "", "", "subject", EmailMessage());
                day += Int32.Parse(ConfigurationManager.AppSettings["NumberOfDays"]); //next schedule
            }
            await Task.Delay((int)TimeSpan.FromDays(1).TotalMilliseconds); 
        }
    }

谢谢。

1 个答案:

答案 0 :(得分:1)

您无法控制应用程序池何时重新启动,并且肯定不会长时间运行。

您可以将上次执行日期保存在数据库中,并定期对其进行轮询以查看它是否已超过给定的天数。

轮询频率取决于您的要求。

这有点“每隔几天”发送邮件的方法,但可能不如计划的任务那么精确。