如何创建一个像cron作业调度程序一样继续运行的东西?

时间:2017-07-14 19:30:36

标签: c# asynchronous asp.net-web-api cron

我正在寻找关于如何创建一个能够持续运行并根据当前时间做一些逻辑的调度程序的建议,比如unix中的cronjob,任何指导真的很受欢迎吗?

我查看了GOOGLE @ https://www.experts-exchange.com/questions/23481296/how-to-create-a-job-schedule-using-C-in-a-console-application.html上的一些帖子,但我不认为这符合我的要求?

using System;
using System.Threading;

public class ThreadWork 
{
   public static void DoWork()
   {
while(true)
            {
                if (DateTime.Now.Hour == 17&DateTime.Now.Minute==0&DateTime.Now.Second==0)
                {
                   myMethod();
              Thread.Sleep(1000*60);
                }
              Thread.Sleep(1000*60);
            }
   }
}
class ThreadTest
{
   public static void Main()
   {
      ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
      Thread myThread = new Thread(myThreadDelegate);
      myThread.Start();
   }
}

1 个答案:

答案 0 :(得分:0)

我建议您尝试使用quartz.net - https://www.quartz-scheduler.net/

您可以创建以不同间隔执行的单独任务。主要类是一个看起来像这样的作业调度程序:

public class JobScheduler
{
    public static void Start()
    {
        IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        scheduler.Start();

        IJobDetail emailJob = JobBuilder.Create<EmailJob>().StoreDurably().WithIdentity("massEmail", "emailGroup").Build();


        ITrigger trigger = TriggerBuilder.Create()
                            .WithIdentity("massEmailTrigger", "emailGroup")
                            .WithSimpleSchedule(x => x
                                .WithIntervalInMinutes(1)
                                .RepeatForever())
                            .Build();

        scheduler.ScheduleJob(emailJob, trigger);
    }
}

这份工作看起来像这样:

public class EmailJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        //Execute the task here....
    }
}

然后你可以在你的global_asax application_start方法中启动它,如下所示:

protected void Application_Start()
{
    JobScheduler.Start();
}

查看网站上的示例......您可以使用许多不同的时间配置。