Ho un elenco di processi ricorrenti di installazione in Hangfire, il tutto con un intervallo di 20 minuti.Interrompi Hangfire che avvia un processo ricorrente se è già in esecuzione
Tutti chiamano lo stesso metodo, ma con parametri diversi. ad es.
ID lavoro TEST_1 => MyTestMethod (1)
ID lavoro test_50 => MyTestMethod (50)
ID lavoro test_37 => MyTestMethod (37)
A volte, un lavoro potrebbe richiede più tempo dell'intervallo, ovvero più di 20 minuti, e voglio assicurarmi che il lavoro non venga eseguito di nuovo mentre un'altra istanza è già in esecuzione.
L'DisableConcurrentExecutionAttribute
non è adatto qui, perché il metodo può essere eseguito contemporaneamente, ma non con gli stessi parametri.
Ho tentato di avere un Dictionary<string, DateTime>
statico che monitorava se un lavoro era già in esecuzione in modo che potesse bloccare chiamate di metodo concorrenti, ma il problema è che se l'applicazione si riavvia per qualsiasi motivo, quindi "dimentica" quali lavori sono attualmente in esecuzione (Hangfire ovviamente continuerà a funzionare in background)
UPDATE
ho anche provato ad aggiungere un tavolo JobState al mio database per tenere traccia che i lavori sono in esecuzione e quindi il controllo quel tavolo all'avvio MyTestMethod, ma ciò dipende dall'impostazione MyTestMethod in esecuzione = 1 all'avvio e in esecuzione = 0 quando termina e se il thread si arresta a metà del processo (per qualsiasi motivo) che potrebbe non accadere, impedendo così il processo di nuovo.
Sono sicuro che posso risolvere questo semplicemente interrogando lo stato del processo Hangfire per ID lavoro - Non riesco proprio a trovare come farlo?
Check this out: http://docs.hangfire.io/en/latest /background-processing/tracking-progress.html (ti suggerisco di guardare l'esempio di Evidenziatore per comprendere il contesto dell'esempio). – aethercowboy