Use the DisallowConcurrentExecution attribute.
Declare your class as follows:
[DisallowConcurrentExecution]
public class SomeTask : IJob
{
}
Misfires
"Misfire Instructions Another important property of a Trigger is its
"misfire instruction". A misfire occurs if a persistent trigger
"misses" its firing time because of the scheduler being shutdown, or
because there are no available threads in Quartz.NET's thread pool for
executing the job. The different trigger types have different misfire
instructions available to them. By default they use a 'smart policy'
instruction - which has dynamic behavior based on trigger type and
configuration. When the scheduler starts, it searches for any
persistent triggers that have misfired, and it then updates each of
them based on their individually configured misfire instructions. When
you start using Quartz.NET in your own projects, you should make
yourself familiar with the misfire instructions that are defined on
the given trigger types, and explained in their API documentation.
More specific information about misfire instructions will be given
within the tutorial lessons specific to each trigger type."
Check out the "trigger misfire instructions" information at the bottom of these pages:
Lesson 5: SimpleTrigger
Lesson 6: CronTrigger
Old Quartz.NET API answer:
http://quartznet.sourceforge.net/apidoc/topic142.html:
IStatefulJob instances follow slightly different rules from regular
IJob instances. The key difference is
that their associated JobDataMap is
re-persisted after every execution of
the job, thus preserving state for the
next execution. The other difference
is that stateful jobs are not allowed
to Execute concurrently, which means
new triggers that occur before the
completion of the IJob.Execute method
will be delayed.
So, declare your 'Job' class as follows:
class DocumentImportJob : IStatefulJob
{
......
}
To avoid delayed tasks re-firing immediately after job completes (when the job takes more than 1 minute and causes a trigger 'misfire'), do the following when creating your trigger(s) (adjust depending on the trigger type used):
myJobTrigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/more-about-triggers.html
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…