我正在执行像这样的“Fire-and-Forget”方法调用。
BackgroundJob.Enqueue(() => SendEmail(name));
我想将作业 ID 传递给 SendEmail() 方法并在方法内使用它。
将
SendEmail
方法更改为如下所示...
public void SendEmail(string name, string jobId)
{
//Body of method
}
将 Hangfire 调用更改为如下所示...
BackgroundJob.Enqueue((string jobId) => SendEmail(name, jobId));
除非您正在寻找一项工作,并发送一封完整的电子邮件,那么您可能需要执行以下操作...
var jobId = BackgroundJob.Enqueue(() => TaskToRun);
BackgroundJob.ContinueWith(jobId, () => SendEmail(name, jobId));
为了实现您的目标,只需将
PerformContext
添加到您的工作方法中:
public void SendEmail(string name, PerformContext context)
{
string jobId = context.BackgroundJob.Id;
}
并在将作业排队时传递
null
:
BackgroundJob.Enqueue(() => SendEmail(name, null));
当实际执行工作时,它将被正确的
context
替换。
来源:https://discuss.hangfire.io/t/use-hangfire-job-id-in-the-code/2621/2