web-dev-qa-db-fra.com

Comment supprimer tous les travaux récurrents de Hangfire au démarrage?

Je cherche à utiliser Hangfire en tant que planificateur de tâches pour les tâches récurrentes. Donc, les configurer est simple avec AddOrUpdate, mais alors comment puis-je le supprimer? Je ne veux pas polluer mon code avec RecurringJob.RemoveIfExists() lorsque ce travail a été supprimé et je ne dois pas oublier de le supprimer ultérieurement.

Existe-t-il un moyen d’obtenir une liste de toutes les tâches récurrentes et de les supprimer au démarrage du serveur, afin que mon code soit ajouté à chaque fois? Si non, s'il y a un meilleur moyen?

par exemple.

Version d'application 1: nouvelle tâche récurrente Hangfire ajoutée Do something 1

Version d'application 2: Ajout de nouveaux travaux récurrents Hangfire Do something 2 et Do Something 3

Version d'application 3: tâche récurrente Hangfire supprimée Do something 2

Problème: le travail existera toujours sur le serveur avec l'erreur "Impossible de charger le type ..." et doit être supprimé.

17
lahsrah

Un peu en retard sur celui-ci mais j'espère que cela aidera quelqu'un d'autre. Je me suis retrouvé dans la même situation. En fin de compte, la réponse sur les données de tâches récurrentes de HangFire m'a aidé.

J'utilise la variable JobStorage pour parcourir toutes les tâches récurrentes et les supprimer successivement, comme indiqué ci-dessous:

using (var connection = JobStorage.Current.GetConnection())
{
    foreach (var recurringJob in connection.GetRecurringJobs())
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}

Je suis sûr qu'il existe un meilleur moyen de sortir mais je ne pouvais pas le trouver

43
paul

la réponse de paul était utile, mais l'API api semble avoir changé. À l’aide de Hangfire 1.6.20, j’avais besoin d’obtenir les travaux récurrents de StorageConnectionExtensions

using (var connection = JobStorage.Current.GetConnection()) 
{
    foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection)) 
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}
5
nevh

Vous pouvez utiliser ce code:

var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();

            foreach (var item in recurringJobs)
            {
                RecurringJob.RemoveIfExists(item.Id);
            }
0
Abdus Salam Azad