首页 > 解决方案 > 在hangfire中运行之前如何使某些方法依赖于另一种方法?

问题描述

我有这个使用Hangfire. 如何确保PreIngestion()先完成IngestA()IngestB()可以执行?

[HttpGet]
[Route("IngestFiles")]
public IActionResult IngestFiles(string cronExpression = "0")
{
     RecurringJob.AddOrUpdate<IIngestService>(x => x.PreIngestion(), cronExpression, TimeZoneInfo.Local);

     RecurringJob.AddOrUpdate<IIngestService>(x => x.IngestA(), cronExpression, TimeZoneInfo.Local);
     RecurringJob.AddOrUpdate<IIngestService>(x => x.IngestB(), cronExpression, TimeZoneInfo.Local);

     return Ok();
}

我可以用 ContinueJobWith 方法做到这一点,但我需要安排它。

标签: c#hangfire

解决方案


由于QueueAttribute不适用于重复性工作,因此您可以创建一个辅助方法来将它们排队,如 Anton 所说。

[HttpGet]
[Route("IngestFiles")]
public IActionResult IngestFiles(string cronExpression = "0")
{
     RecurringJob.AddOrUpdate<IIngestService>(x => IngestHelper.Ingest(x), cronExpression, TimeZoneInfo.Local);

     return Ok();
}

RecurringJobHelper.cs

public static class RecurringJobHelper
{
    public static void Ingest(IIngestService ingestService)
    {
        ingestService.PreIngestion();
        ingestService.IngestA();
        ingestService.IngestB();
    }
}

推荐阅读