如何手动触发Hangfire作业?

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

4

如果有人想手动触发/排队一个预定的工作(就像我一样):

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

在这里,_backgroundJobs 是使用 IoC 容器注入的 IBackgroundJobClient 的实现。


3
您可以使用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”后开始。 - blablubla12

2

@shikyo提供的答案在Hangfire 1.7.27上对我不起作用。然而,以下方法有效:

IRecurringJobManager.Trigger(HangfireRecurringJobID); 

0
你可以这样做
RecurringJob.TriggerJob

1
嗨 @LemonNoCry,欢迎来到Stack!这个问题已经有几个经过验证的答案了。你能否解释一下你的解决方案,并说明它在其他现有答案中所没有涵盖的内容? - Captain Hat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接