Table of Contents

Enum OverlapPolicy

Namespace
Quartz
Assembly
Quartz.dll

What a trigger does when one of its firings comes due while an earlier firing of the same trigger is still running.

public enum OverlapPolicy

Fields

AllowAll = 4

The firing starts, alongside the one still running — stated explicitly rather than inherited.

Behaves as Default does. It never overrides DisallowConcurrentExecutionAttribute.

BufferOne = 2

The firing waits for the running one to end, and then starts. However many occurrences came due meanwhile, at most one is kept.

While one of its firings runs the trigger is Blocked, exactly as a trigger of a DisallowConcurrentExecutionAttribute job is, and what came due while it was blocked is settled the same way once it is released: an occurrence missed by more than the misfire threshold is the misfire instruction's to handle, and the default instruction fires it once, now.

CancelPrevious = 3

The running firing is interrupted — its cancellation token is signalled — and the new firing starts.

An interrupt reaches only a firing on the node that is starting the new one. A running firing on another node of a cluster cannot be interrupted from here, so the trigger waits for it instead, as BufferOne does. Cancellation is cooperative: a job that ignores its token runs on beside the new firing.

Default = 0

The firing starts, alongside the one still running. This is what every trigger did before overlap policies existed, and what a trigger that names none does.

Skip = 1

The firing is dropped. The trigger moves on to the occurrence after it, and the skipped one is reported to TriggerSkipped(ITrigger, IScheduler, CancellationToken) and recorded in the misfire history with Overlap.

A skipped firing is not a misfire: the trigger's misfire instruction is not applied, and it is not counted as one.

Remarks

The policy is the trigger's, and it only ever looks at the trigger's own firings: another trigger of the same job running is not an overlap. A job marked DisallowConcurrentExecutionAttribute is held back by that attribute first, as it always was — while one of its firings runs, none of its triggers fires, whatever the policy says — so the policy decides only what the attribute lets through.

A retry is never skipped, held or cancelled: it continues an occurrence that already started, and the attempt it retries is over by the time it comes due.

Persisted as the integer, in the OVERLAP_POLICY column of the triggers table, so the values are a storage contract: members are never renumbered and a new one is appended.

See Also