如何将父作业的结果传递给它的延续
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")
访问父级在后续作业中产生的值,其中 context
是 PerformContext
(由 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));
}
}
从 1.7.8 版本开始,可以将结果从父作业传递到 Hangfire 中的延续作业。但是没有提供文档或示例。在浏览代码时,我意识到我需要将 ContinuationsSupport
属性与 pushResults: true
参数一起使用。 但我不知道 Hangfire 是如何保存结果的,然后我该如何访问结果。 我无法理解属性 class 中的代码。
看来使用pushResults
等于true的属性然后设置函数的return类型为e就可以了。 G。 string
。然后可以通过调用 context.GetJobParameter<SomeType>("AntecedentResult")
访问父级在后续作业中产生的值,其中 context
是 PerformContext
(由 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));
}
}