2017-11-21 9 views
1
auftreten

Ich habe Jobs mit mehreren Trigger. In einigen Fällen überlappen sich die Trigger. Wenn Quartz.NET die Überlappung der Trigger festlegt, muss die Methode IJob.Execute(IJobExecutionContext context) für jeden Trigger ausgeführt werden.Quartz.NET 2.6.1: Mehrere Trigger für denselben Job Trigger zur gleichen Zeit, müssen aber nur ein Trigger

Gibt es eine Möglichkeit, diese Überlappung zu vermeiden?

Vielen Dank im Voraus.

+1

Mögliches Duplikat [Was genau von 'DisallowConcurrentExecution' in Quartz.net bedeuten] (https://stackoverflow.com/ Fragen/23390698/Was-ist-genau-gemein-durch-disallowconcurrentexecution-in-quartz-net) – Najera

+0

Verwenden Sie einfach "[DisallowConcurrentExecution]" Attribut in der Job-Implementierung – Najera

+0

@Najera Danke für die Antwort. Ich habe dies versucht, aber das alles verhindert die ausgelösten Instanzen des Jobs, die gleichzeitig ausgeführt werden. Wenn drei Trigger gleichzeitig ausgelöst werden, erzwingt das angegebene Attribut den Job dreimal hintereinander. –

Antwort

1

ich nicht getestet, aber ich würde ihm eine Chance geben:

[DisallowConcurrentExecution] 
public class Job : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     bool wasExecutedAt = WasExecutedAt(context.ScheduledFireTimeUtc); 
    } 

    private bool WasExecutedAt(DateTimeOffset? fireTime) 
    { 
     // Check and maintain the state 
    } 
} 
+0

Dies scheint zu funktionieren. Danke Najera! Für andere, die diesen Beitrag sehen, habe ich das Objekt "context.JobDetail.JobDataMap" beibehalten und das Attribut [PersistJobDataAfterExecution] für die Klasse hinzugefügt. –