Avanzamento lavoro Quartz.Net
-
12-09-2019 - |
Domanda
C'è un modo facile per un IJob di pubblicare i dati dall'interno del lavoro. Ho un lavoro che esegue un processo di importazione, ma vorrei recuperare i progressi, cercando il lavoro e che ne facciano richiesta.
Ho pensato che io possa essere in grado di utilizzare i JobDetails, ma non sembra riflettere le modifiche apportate all'interno del lavoro?
Soluzione
Non c'è un built-in modo che possa dare facilmente la cosa che stai cercando. Ma non è così difficile pubblicare informazioni di avanzamento per qualche altra struttura tramite Pubblica Sottoscrivi neanche. Si potrebbe anche scrivere periodicamente i progressi informazioni in un archivio permanente -. Che avrebbe anche darvi il vantaggio di facile tentativi quando si conosce l'ultimo bit di successo che è stato elaborato
Un fuori discussione / processo potrebbe anche determinare lo stato interrogato se la destinazione in cui si sta importando e si dovrebbe avere da qualche parte le informazioni su elementi totali che stanno per essere importati.
posti di lavoroQuartz.NET sono unità che vengono elaborati come un .. bene all'unità e quindi non c'è il concetto di quanto ci sia ancora da fare. O avete bisogno di queste informazioni in un altro lavoro che dipende dal processo di importazione?
Altri suggerimenti
E 'del tutto possibile.
Vorrei andare con qualcosa di simile. Nel lavoro:
public virtual void Execute(IJobExecutionContext context)
{
int i = 0;
while (i++ < 100)
{
context.JobDetail.JobDataMap["progress"] = i;
Thread.Sleep(1000);
}
}
Nel codice che vuole recuperare il progresso:
var jobs = scheduler.GetCurrentlyExecutingJobs();
foreach (var j in jobs)
{
Console.WriteLine("Progress of {0} is {1}",
j.JobDetail.Key,
j.JobDetail.JobDataMap["progress"]);
}
È possibile filtrare risultato di GetCurrentlyExecutingJobs, naturalmente.
Inoltre, è possibile impostare lavoro da Durable
e PersistJobDataAfterExecution
, così dopo che è fatto, è possibile recuperare il suo progresso e quant'altro tramite scheduler.GetJobDetail(..)
e l'accesso ai suoi JobDataMap
in seguito.