Взгляните на кварце:
Quartz.NET является полнофункциональным, открытым исходным кодом система планирования заданий, которые могут быть использованы из маленьких приложений для крупномасштабных корпоративных систем
Quartz Enterprise Scheduler .NET
Вы можете создать новый Quarts Job, назовите его QuestionSenderJob. Тогда ваше приложение может выполнить schedule задание в планировщике Quartz, задания могут иметь много экземпляров одного и того же задания с пользовательскими данными - в вашем случае QuestionId.
Кроме того, он поддерживает хранение планировщика заданий в вашей базе данных SQL (в него включены DDL-скрипты), поэтому вы можете создать некоторые отношения, если вам нужно, например, для пользовательского интерфейса.
Вы можете найти скрипты таблицы создания SQL в каталоге «базы данных/dbtables» распределения Quartz.NET
Lesson 9: JobStores
Таким образом, вы оставляете стрельбы в нужный момент двигателя Quartz ,
Когда вы перейдете к основам Quartz .NET, см. Этот фрагмент кода, который я сделал для вашего случая, чтобы запланировать работу. Возможно, потребуются некоторые изменения.
IDictionary<string, object> jobData = new Dictionary<string, object> { { "QuestionId", questionId } };
var questionDate = new DateTime(2016, 09, 01);
var questionTriggerName = string.Format("Question{0}_Trigger", questionId);
var questionTrigger = TriggerBuilder.Create()
.WithIdentity(questionTriggerName, "QuestionSendGroup")
.StartAt(questionDate)
.UsingJobData(new Quartz.JobDataMap(jobData))
.Build();
scheduler
.ScheduleJob(questionSenderJob, questionTrigger);
Затем в Job вы получите свой вопрос через JobExecutionContext.
public class QuestionSenderJob: IJob
{
public void Execute(JobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
// Extract question Id and send message
}
}
Позвольте мне попробовать этот подход и отправить уведомление. –
Я обновил ответ, чтобы облегчить вам движение вперед :) –
Спасибо Edgars. Еще одна проблема здесь. После утилизации приложения (новое развертывание, регулярная утилизация) все установленные задания запланированы. есть ли способ сохранить всю работу? Я попытался сохранить в SQL также. –