И я использую последнюю версию следующих 2 пакетов:
[*]hangfire.core 1.8.20
> Hangfire.memorystorage 1.8.1.11
/> И у меня есть следующее простое приложение для консоли, чтобы запустить простую функцию, со следующей Cron: < /p>
* /2 * /1 * * * * < /p>
< /blockquote>
, который должен работать каждые 2 секунды. Идея?
Код: Выделить всё
using System.Linq.Expressions;
using Hangfire;
using Hangfire.MemoryStorage;
namespace TestJob
{
internal class Program
{
static void Main(string[] args)
{
var jobManager = new JobManager();
jobManager.Start();
Console.WriteLine("Hello, World!");
Console.Read();
}
}
class JobManager
{
public void Start()
{
GlobalConfiguration.Configuration.UseMemoryStorage();
var pulseCron = "*/2 */1 * * * *";
AddJob(BackgroundJobs.Pulse, () => RunPulseJobAsync(), pulseCron);
}
private void AddJob(string jobId, Expression methodCall, string jobCron)
{
RecurringJob.AddOrUpdate(jobId, methodCall, jobCron);
}
[Queue(JobConstants.CriticalQueue)]
public async Task RunPulseJobAsync()
{
var jobRunner = new PulseJob();
await jobRunner.StartAsync();
}
}
public sealed class PulseJob() : IJobRunner
{
public string Id => BackgroundJobs.Pulse;
public async Task StartAsync()
=> Console.WriteLine(DateTime.Now);
}
public interface IJobRunner
{
public string Id { get; }
Task StartAsync();
}
public static class JobConstants
{
public const string CriticalQueue = "critical";
}
public static class BackgroundJobs
{
public const string Pulse = "Pulse";
}
}
RunPulseJobAsync(), pulseCron);
}
< /code>
Если я использую именно то, что говорится в официальном документе, то он работает, несмотря на то, что он работает каждые 15 секунд: < /p>
using System.Linq.Expressions;
using Hangfire;
using Hangfire.MemoryStorage;
namespace TestJob
{
internal class Program
{
static void Main(string[] args)
{
var jobManager = new JobManager();
jobManager.Start();
Console.WriteLine("Hello, World!");
Console.Read();
}
}
class JobManager2
{
BackgroundJobServer server;
public void Start()
{
GlobalConfiguration.Configuration.UseMemoryStorage();
RecurringJob.AddOrUpdate("Test", () => DoSomething(), "*/2 */1 * * * *");
server = new BackgroundJobServer();
}
public void DoSomething()
{
Console.WriteLine("2- " + DateTime.Now);
}
}
}
< /code>
Итак, в заключение, я заметил 3 вещах: < /p>
Минимальный интервал - каждые 15 секунд. < /li>
Он не работает с очередью.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... urring-job
Мобильная версия