如何手动触发 Hangfire 作业?
How do I trigger a Hangfire job manually?
想法是,在加载页面上有一个电子邮件输入字段。一旦用户写完他的电子邮件并单击“获取电子邮件”按钮,就会触发一个后台作业。它将检查交易是否完成,一旦完成,它将向用户发送一封电子邮件。关于电子邮件服务(我使用 mailgun
)的所有必要代码都已编写,但我完全不知道如何实现调度程序。
我应该如何实现这一目标?
您可以只使用 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"));
}
对于登陆这里并希望手动 trigger/enqueue 预定作业的任何人(就像我一样):
_backgroundJobs.ChangeState(jobId, new EnqueuedState(), ScheduledState.StateName);
其中 _backgroundJobs
是使用 IoC 容器注入的 IBackgroundJobClient
的实现。
@shikyo 提供的答案在 Hangfire 1.7.27 上对我不起作用。然而,这样做了:
IRecurringJobManager.Trigger(HangfireRecurringJobID);
想法是,在加载页面上有一个电子邮件输入字段。一旦用户写完他的电子邮件并单击“获取电子邮件”按钮,就会触发一个后台作业。它将检查交易是否完成,一旦完成,它将向用户发送一封电子邮件。关于电子邮件服务(我使用 mailgun
)的所有必要代码都已编写,但我完全不知道如何实现调度程序。
我应该如何实现这一目标?
您可以只使用 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"));
}
对于登陆这里并希望手动 trigger/enqueue 预定作业的任何人(就像我一样):
_backgroundJobs.ChangeState(jobId, new EnqueuedState(), ScheduledState.StateName);
其中 _backgroundJobs
是使用 IoC 容器注入的 IBackgroundJobClient
的实现。
@shikyo 提供的答案在 Hangfire 1.7.27 上对我不起作用。然而,这样做了:
IRecurringJobManager.Trigger(HangfireRecurringJobID);