基本上,我要做的是创建一个在给定天数内执行的线程,该天数可以更改。关键是应该定期发送电子邮件,尽管我知道这绝对不是最好的解决方案之一,但我正在寻找最好的方法,但是我必须继续按照要求进行操作,因此我不能使用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);
}
}
谢谢。
答案 0 :(得分:1)
您无法控制应用程序池何时重新启动,并且肯定不会长时间运行。
您可以将上次执行日期保存在数据库中,并定期对其进行轮询以查看它是否已超过给定的天数。
轮询频率取决于您的要求。
这有点“每隔几天”发送邮件的方法,但可能不如计划的任务那么精确。