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

How to write a stateful background job in ASPNET Boilerplate

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

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 版本(如果有的话)。 这要求我应该被允许更新 AbpBackgroundJobs.JobArgs 字段中的数据。

有什么办法吗?这是 ABP 设计允许的吗?

谢谢

您可以将状态保存在临时数据库或文件中。因此,当您的发布正在进行时,请保存每一步。当服务重新启动时,首先从持久化数据中读取以检查您的上次发布状态。如果它已损坏,则继续,如果不是从您的新版本开始。

我 "fixed" 这个问题在将后台作业排入队列并将发布 ID 放入作业输入之前启动 TFS 版本。该工作现在只负责跟踪 运行 发布,如果发现 none 则不开始发布。