J'utilise le planificateur Quartz.net pour la migration de données d'une base de données à une autre. Je veux démarrer un travail séparé pour chaque transfert de données de table de base de données. J'ai un travail parent pour la migration de données qui déclenche des travaux enfants pour chaque table. Je souhaite que le travail parent attende la fin de tous les travaux enfants, mais dès que je démarre le travail parent, tous les travaux enfants continuent de s'exécuter, mais le travail parent est terminé dès qu'il déclenche tout le travail. merci d'avance ..Le concept d'emploi parent-enfant existe-t-il dans Quartz.net
Exemple de code est donné ci-dessous
public class DataMigrationJob : IJob
{
public void Execute(IJobExecutionContext context)
{
List<string> tableList = somelist;
foreach (var table in tableList)
{
JobDetailImpl job = new JobDetailImpl(jobKey, groupName, tableJobType, true, true);
if (!SchedulerProvider.Scheduler.CheckExists(job.Key))
{
context.Scheduler.AddJob(job, true, true);
}
context.Scheduler.TriggerJob(job.Key);
}
}
}
Y at-il une bonne façon de garder l'emploi des parents en cours d'exécution jusqu'à ce que tous les travaux sont faits les enfants?
J'ai une idée de le faire fonctionner en utilisant en boucle qui fera appel à une fonction dans un état et ajouter attente, quelque chose comme ci-dessous
public boolena AllChildrenJobCompleted(IJobExecutionContext context, List<JobKey> jobKeys)
{
runningJobsList = context.Scheduler.GetCurrentlyExecutingJobs();
//check if children jobs are part of this list
//return false until list contains any of the child job
//return true when list does not contain child jobs
}
plus tard cette fonction peut être appelée à l'intérieur d'exécuter la fonction de travail parent comme this
while(!AllChildrenJobCompleted(context,childJobs))
{wait(1000);}
Vous ne savez pas si c'est la meilleure pratique.
Merci pour vos commentaires, en fait je veux afficher l'état des travaux d'enfants dans l'interface utilisateur de quartz. Dans le cas où l'un des travaux enfant est échoué, je devrais pouvoir le déclencher de nouveau à partir de l'interface utilisateur. Chaque travail enfant est un travail indépendant et le travail parent est requis car j'ai besoin d'un seul point où tous les travaux enfants peuvent être déclenchés en même temps. – user4549753