Можем ли мы настроить HangFire для планирования работы для пользователя на разные промежутки времени? - PullRequest
1 голос
/ 28 января 2020

Мы хотим дать возможность пользователю из пользовательского интерфейса планировать работу с 15 минут до 23:59 часов временного диапазона. По которым разные пользователи могут выбирать разные временные интервалы для запуска своих заданий.

Например:
Сценарий-1: Пользователь A хочет запланировать выполнение задания каждые 15 минут.
Сценарий-2: Пользователь B хочет запланировать выполнение задания каждые 30 минут.
И т. Д.

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Я хочу опубликовать свой ответ. Я использовал Recurring job с уникальным идентификатором (т. Е. $ "Userid_ {job.UserId}"), который является первым параметром в Recurring.AddOrUpdate () , с помощью которого отдельные повторяющиеся задания будет создан для каждого пользователя. Пожалуйста, посмотрите на код ниже, чтобы понять. Теперь Hangfire создаст 4 повторяющихся задания для 4 разных пользователей с разными частотами.

            List<Scheduler> list = new List<Scheduler>
            {               
                new Scheduler { EveryXMinutes = 3, UserId = 1023028, On = true },
                new Scheduler { EveryXMinutes = 5, UserId = 1023023, On = true },
                new Scheduler { EveryXMinutes = 10, UserId = 1023025, On = true },
                new Scheduler { EveryXMinutes = 15, UserId = 1023027, On = true }
            };
            foreach (var job in list)
            {
                if (job.On)
                {
                    RecurringJob.AddOrUpdate($"userid_{job.UserId}", () => demoService.RunTaskDemo2(job.UserId), $"*/{job.EveryXMinutes} * * * *");
                }
                else
                {
                    RecurringJob.RemoveIfExists($"userid_{job.UserId}");
                }
            }

RunTaskDemo2 (int) - это общий метод, который выполняется для каждого пользователя

        public void RunTaskDemo2(int userid)
        {
            // Any code of your own
            Console.WriteLine("--------------&&&&&----------------------");
            Console.WriteLine($"RUNNING TASK FOR USERID {userid} - {i.ToString()}");
            Console.WriteLine("--------------^^^^^^^----------------------");
        }

Я надеюсь, что это решение.

0 голосов
/ 30 января 2020

Предполагая, что это повторяющееся задание, вы можете отформатировать uid задания как «Do Stuff ()». Для каждого пользователя используйте AddOrUpdate (), чтобы зарегистрировать задачу со своими расписаниями cron.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...