如何在ASPNET Boilerplate中编写有状态的后台作业

时间:2018-07-11 10:48:25

标签: asp.net-core aspnetboilerplate

我有一个ASPNET Boilerplate项目,其后台作业是这样编写的:

public class MyJob : BackgroundJob<MyJobInput>, ITransientDependency
{
    public MyJob()
    {
    }

    [UnitOfWork]
    public override void Execute(MyJobInput input)
    {
        // Create the TFS release and wait for it to complete
    }
}

此作业在TFS中开始长时间发布,并等待其完成。问题在于,如果作业启动了TFS发行版,并且在一段时间后重新启动了后端服务器,则该作业将被重启并创建新的发行版。

我想做的是让后台作业通过从作业输入数据中读取发行版ID来恢复先前启动的TFS发行版(如果有)。 这就要求应该允许我更新AbpBackgroundJobsJobArgs字段中的数据。

有什么办法吗? ABP故意允许这样做吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以将状态保存在临时数据库或文件中。因此,当您进行发行时,请保存每一步。重新启动服务后,请先从保留的数据中读取数据,以检查您的最新发布状态。如果它已损坏,请重新启动新版本。

答案 1 :(得分:0)

我“修复”了此问题,在将后台作业排队之前将TFS发行版开始并将发行版ID放入作业输入中。该作业仅负责立即关注正在运行的发行版,如果找不到任何发行版,则不负责启动发行版。