【问题标题】:How do I trigger a Hangfire job manually?如何手动触发 Hangfire 作业?
【发布时间】:2019-04-28 02:32:53
【问题描述】:

这个想法是,在加载页面上,有一个电子邮件输入字段。一旦用户写了他的电子邮件并单击“获取电子邮件”按钮,就会触发一个后台作业。它将检查交易是否完成,一旦完成,它将向用户发送一封电子邮件。关于电子邮件服务的所有必要代码(我使用了mailgun)都已经编写好了,但是我完全不知道如何实现调度程序。

我应该如何实现这一目标?

【问题讨论】:

    标签: c# asp.net-mvc scheduled-tasks scheduler hangfire


    【解决方案1】:

    对于任何登陆这里并希望手动触发/排队预定作业的人(就像我一样):

    _backgroundJobs.ChangeState(jobId, new EnqueuedState(), ScheduledState.StateName);
    

    其中_backgroundJobs 是使用 IoC 容器注入的 IBackgroundJobClient 的实现。

    【讨论】:

      【解决方案2】:

      您可以使用Enqueue 手动触发作业

      BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
      

      @EDIT

      要运行第二个作业,如果第一个作业成功,您可以使用ContinueWith()

      var id = BackgroundJob.Enqueue<ITask1>(x => Console.WriteLine("First task")); 
      if (id != null) 
      { 
          BackgroundJob.ContinueWith<ITask2>(id, x => Console.WriteLine("Second task")); 
      }
      

      【讨论】:

      • 谢谢。快速提问,我如何让它返回一个真/假值。我希望在父作业返回“true”后开始子作业
      【解决方案3】:

      @shikyo 提供的答案在 Hangfire 1.7.27 上对我不起作用。但是,这样做了:

      IRecurringJobManager.Trigger(HangfireRecurringJobID); 
      

      【讨论】:

        猜你喜欢
        • 2011-10-25
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        • 2014-01-26
        相关资源
        最近更新 更多