2017-08-24 1 views
1

Utilisation de Quartz.Net Je souhaite déclencher manuellement un travail sans planification (pour l'instant). Cependant, le travail s'exécute au démarrage (ce que je ne veux pas), puis ne répond pas à un déclencheur manuel (problème principal).Activation manuelle d'un travail ne fonctionnant pas

private IScheduler _scheduler; 

public void SetupAndTestScheduler() 
{ 
    ISchedulerFactory sf = new StdSchedulerFactory(); 
    _scheduler = sf.GetScheduler().Result; 
    _scheduler.Start(); 
    _scheduler.ScheduleJob(
     new JobDetailImpl(nameof(TestDataJob), typeof(TestDataJob)), null); 

    // manually trigger the job 
    _scheduler.TriggerJob(jobKey: new JobKey(nameof(TestDataJob))); 
} 

public class TestDataJob : IJob 
{ 
    public Task Execute(IJobExecutionContext context) 
    { 
     // blah blah blah 
    } 
} 

Je suis sur NetStandard2.0, avec Quartz.Net Alpha 3. Je me demande si cela est un problème avec la version 3?

Répondre

1

Dans Quartz.Net 3.x Alpha, les méthodes comme scheduler.Start, scheduler.ScheduleJob, etc ..., sont maintenant async, ce qui signifie que vous devez les await. Qu'est-ce qui se passe dans votre code est que le Task retourné par ScheduleJob n'est même pas exécuté avant l'appel à Shutdown, car vous ne l'attendez pas. Vous pouvez suivre le Quick Start Guide pour savoir exactement comment l'utiliser.

En un mot, ce que vous devez faire:

  • utiliser les async/await sémantique
  • ajouter le travail au planificateur en appelant la méthode scheduler.AddJob (votre travail doit être déclarée comme durable dans ce cas, comme vous n'êtes pas associez un déclencheur avec elle)
  • et vous pouvez appeler la méthode scheduler.TriggerJob() pour déclencher votre travail