如何将父作业的结果传递给它的延续

How to pass result from parent job to its continuation

从 1.7.8 版本开始,可以将结果从父作业传递到 Hangfire 中的延续作业。但是没有提供文档或示例。在浏览代码时,我意识到我需要将 ContinuationsSupport 属性与 pushResults: true 参数一起使用。 但我不知道 Hangfire 是如何保存结果的,然后我该如何访问结果。 我无法理解属性 class 中的代码。

看来使用pushResults等于true的属性然后设置函数的return类型为e就可以了。 G。 string。然后可以通过调用 context.GetJobParameter<SomeType>("AntecedentResult") 访问父级在后续作业中产生的值,其中 contextPerformContext(由 hangfire 提供)

我写了一个小例子,因为我一直在努力理解上下文的来源。

例子

public interface IReturnAValueProcess
{
   string Execute();
   
   // Can have multiple parameters besides the PerformContext
   void Continue(PerformContext context);
}
public class ReturnAValueProcess: IReturnAValueProcess
{
     public ReturnAValueProcess() {}
     
     [ContinuationsSupport(pushResults: true)]
     public string Execute()
     {
         Console.WriteLine("This job will return a string");

         return "Hello world";
     }

     public void Continue(PerformContext? context)
     {
         // This will write "Hello world" to the console, GetJobParameter type should be the same as whatever type is returned;
         Console.WriteLine(context.GetJobParameter<string>("AntecedentResult"));
     }
}
[Controller]
public class MyController : BaseController
{
   // Initialization, etc.

   [HttpGet]
   public void StartJob()
   {
      var process = new ReturnAValueProcess();
      var id = BackgroundJob.Enqueue(() => process.Execute());
      // We pass in null for the PerformContext argument, 
      // because Hangfire will substitute it with the correct context when executing the job
      var id2 = BackgroundJob.ContinueJobWith(id, () => process.Continue(null));
   }
}