2009-09-19 13 views
6

Je suis en train de mettre en œuvre Quartz.net dans une application simple qui devrait exécuter un morceau de code tous les (par exemple) 5 secondes. Seulement maintenant, le code prend parfois plus de 5 secondes pour terminer. Au début, j'ai eu le problème que le code a été exécuté alors que le même code était encore en cours d'exécution, j'ai résolu cela en utilisant l'interface IStateFulJob au lieu de l'interface IJob.Quartz.net travail de répétition à intervalle après que le travail est terminé

Mais ce que je voudrais vraiment accomplir, c'est que mon travail est exécuté 5 secondes après que le travail est terminé, et non 5 secondes après le début de mon travail précédent. Je pourrais bien sûr gérer l'événement qui se déclencherait lorsque mon auditeur «entendrait» que le travail est prêt et reprogrammerait le travail, mais je me demandais s'il n'y avait pas de fonctionnalité standard pour cela.

+1

'IStatefulJob' a été abandonné. Utilisez l'attribut DisallowConcurrentExecution pour interdire l'exécution simultanée de plusieurs instances de travail. –

Répondre

4

Actuellement, il n'y a pas de moyen standard d'y parvenir car Quartz.NET joue sur l'idée d'avoir un temps de feu prédéfini (calculé auparavant) et d'interroger au bon moment pour déclencher le travail.

La façon dont vous avez décrit serait le chemin le plus facile. Vous pouvez soit programmer depuis le travail l'exécution suivante, soit depuis l'écouteur.

+5

Est-ce que cela a changé depuis lors jusqu'à maintenant? C'était la réponse il y a quatre ans, est-ce toujours la même chose aujourd'hui? –