Quartz based file existence trigger?

I am very new to using quartz and I have a question about triggers. Is it possible to run based on the existence of a file? I would like Quartz to do the job until a specific file is found, and then stop doing this job and maybe move on to another.

For example, I would like to do something like this:

(1) Job1 checks if File.txt exists in this directory every 60 seconds.

(2) If File.txt is found, run Job2 to start. Job1 stops checking for a file.

Now I have:

// Job definitions
var Job1 = JobBuilder.Create<TestEmail>().WithIdentity("job1", "group1").Build();
var Job2 = JobBuilder.Create<TestFileTrigger>().WithIdentity("job2", "group2").Build();

// Triggers
ITrigger trigger1 = TriggerBuilder.Create()
      .WithIdentity("trigger1", "group1").StartNow()
      .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
      .Build();

ITrigger trigger2 = TriggerBuilder.Create()
      .WithIdentity("trigger2", "group2").StartNow()
      .Build();

// Schedule jobs
scheduler.ScheduleJob(Job1, trigger1);
if (TestFileTrigger.fileExistence == true) 
{
     scheduler.ScheduleJob(Job2, trigger2);
}

but it looks like Job2 never starts.

TestEmail TestFileTrigger . TestFileTrigger.fileExistence ( ).

: TestFileTrigger.fileExistence . Job1/Job2, .

: , Thread.Sleep(TimeSpan.FromSeconds(x)); if, if , . ( x - .) , ? , .

+4
2

, concurrency threading, .

.

.

  • Job1
  • TestFileTrigger.fileExistence, true, Job2 ( , ).

threadpool Job1. , TestFileTrigger.fileExistence = true. Main thread .

FIN.

, TestFileTrigger.fileExistence. . , .

Thread.Sleep, 1 (job1 , , , ). , , , (), , .

, , , .

JobScheduler.ScheduleJob(job1, trigger1); .

4 , FileScanJob.

0

?

, , Windows - , , - :

ThreadStart start = SetupSchedules()
var thread = new Thread(start) { Name = "mysvc" }
thread.Start();

.. override void OnStart(string[] args) Windows.

SetupSchedules , Quartz - (, OP, ):

ISchedulerFactory factory = new StdSchedulerFactory();
JobScheduler = factory.GetScheduler();
JobScheduler.ScheduleJob(job1, trigger1);

, . , , , , .

- :

private void ManageThread()
{
   var _thread = Thread.CurrentThread;
   while (!_threadMustStop) // false by default, set this to true in a 'shutdown' process
   {
       Thread.Sleep(10000);
   }
}

... SetupSchedules

+1

Source: https://habr.com/ru/post/1546600/


All Articles