我们可以将 HangFire 配置为在不同的时间间隔为每个用户安排一个作业吗?
Can we configure HangFire to schedule a job per user at different time intervals?
我们想为 UI 的用户提供在 15 分钟到 23:59 小时的时间范围内安排工作的可行性。不同的用户可以 select 不同的时间段来 运行 他们的工作。
例如:
场景 1:用户 A 希望将作业安排为每 15 分钟 运行。
场景 2:用户 B 希望将作业安排为每 30 分钟 运行。
等等
假设这是一个循环作业,您可以将作业 uid 格式化为 "Do Stuff ()"。对于每个用户,使用 AddOrUpdate() 将任务注册到他们自己的 cron 计划。
我会 post 回答我自己的问题。
我使用了带有 唯一标识符 (即 $"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("--------------^^^^^^^----------------------");
}
我希望这是解决方案。
我们想为 UI 的用户提供在 15 分钟到 23:59 小时的时间范围内安排工作的可行性。不同的用户可以 select 不同的时间段来 运行 他们的工作。
例如:
场景 1:用户 A 希望将作业安排为每 15 分钟 运行。
场景 2:用户 B 希望将作业安排为每 30 分钟 运行。
等等
假设这是一个循环作业,您可以将作业 uid 格式化为 "Do Stuff ()"。对于每个用户,使用 AddOrUpdate() 将任务注册到他们自己的 cron 计划。
我会 post 回答我自己的问题。 我使用了带有 唯一标识符 (即 $"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("--------------^^^^^^^----------------------");
}
我希望这是解决方案。