データベース自体は、タイマーやスケジュールされたタスクを提供しません (少なくとも SQLLite は提供しません)。期限切れのリストをクリーンアップするタスクをプログラムする必要があります。そのためには、いくつかのオプションがあります。
- 独自の ASP.net アプリケーション内でスケジュールされたタスクを使用する
- ホスティング プロバイダーによってスケジュールおよび管理されるタスク (別のアプリケーション) を使用する。クラウドを使用している場合は、クラウド プロバイダーがこれを行う機能を備えている可能性が高くなります。
最初のオプションを使用する場合は、Quartzをご覧ください。ここで必要なことを行うために Quartz を使用するよりも、Azure に WorkerRole があります。セットアップは非常に簡単です。例を次に示します。
// Initialize Quartz
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler();
_scheduler.JobFactory = new NinjectJobFactory(_kernel);
DateTimeOffset morning = DateBuilder.NewDateInTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))
.AtHourMinuteAndSecond(5, 30, 0)
.Build();
// Schedule task for email being sent to people who have not signed up after their trial expiry
IJobDetail userFeedbackJobDetail = JobBuilder.Create<LostUserFeedbackRequestJob>().WithIdentity("User Feedback Emails").Build();
ITrigger dailyTriggerForUserFeedback = TriggerBuilder.Create()
.WithIdentity("Daily Trigger (User Feedback)")
.StartAt(morning)
.WithSimpleSchedule(schedule => schedule.WithInterval(TimeSpan.FromDays(1)).RepeatForever())
.ForJob(userFeedbackJobDetail)
.Build();
_scheduler.ScheduleJob(userFeedbackJobDetail, dailyTriggerForUserFeedback);
// Finally, start the scheduler
_scheduler.Start();
これにより、試用期間が終了した後に私のプロジェクトのいずれかのサービスを使用することを選択しなかったユーザーからのフィードバックを求めるメールが毎日送信されます。ジョブは毎日午前 5 時 30 分に実行されます