我有一个适用于Quartz 2.6的Windows服务。现在我想调用一些API所以我研究了一下并且知道Quartz3.0及以上版本支持Async/Await
。但是使用Quartz 3.0,我的执行函数不会被调用。
主要类
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main(string[] args)
{
var myService = new Service1();
if (Environment.UserInteractive)
{
string parameter = string.Concat(args);
switch (parameter)
{
case "--install":
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
#if DEBUG
myService.Start();
#endif
}
else
{
var servicesToRun = new ServiceBase[] { myService };
ServiceBase.Run(servicesToRun);
}
}
}
服务类
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
TestDemoJob1().GetAwaiter().GetResult();
}
protected override void OnStop()
{
System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory + "OnStop.txt");
}
public void Start()
{
OnStart(new string[0]);
}
public static async Task TestDemoJob1()
{
IScheduler scheduler;
var schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.GetScheduler().Result;
scheduler.Start().Wait();
int ScheduleIntervalInMinute = 10;//job will run every minute
JobKey jobKey = JobKey.Create("DemoJob1");
IJobDetail job = JobBuilder.Create<DemoJob1>().WithIdentity(jobKey).Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("JobTrigger")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(ScheduleIntervalInMinute).RepeatForever())
.Build();
await scheduler.ScheduleJob(job, trigger);
}
}
职业分类
public class DemoJob1 : IJob
{
public DemoJob1()
{
}
public Task Execute(IJobExecutionContext context)
{
//Some Async Task
return Task.FromResult(0);
}
}
如果我尝试在控制台应用程序中运行相同的应用程序,则此方法有效。但是,如果我尝试使用Windows服务应用程序运行它。执行功能永远不会被执行。任何帮助,将不胜感激。在过去的3个小时左右,我被困在这里。已经尝试了很多方法,但没有一个方法正在发挥作用。