У меня было подобное требование раньше. Вот метод, который я написал, чтобы получить свойство SucceededAt
, используя имя запущенного метода и текущий PerformContext
:
public static DateTime? GetCompareDate(PerformContext context, string methodName)
{
return long.TryParse(context.BackgroundJob.Id, out var currentJobId)
? JobStorage.Current
?.GetMonitoringApi()
?.SucceededJobs(0, (int)currentJobId)
?.LastOrDefault(x => x.Value?.Job?.Method?.Name == methodName).Value?.SucceededAt
: null;
}
Вы можете также легко получить DeletedJobs
, EnqueuedJobs
,FailedJobs
и т. Д.
Вы можете вызвать его из метода задания следующим образом:
public async Task SomeJob(PerformContext context, CancellationToken token)
{
⋮
var compareDate = GetCompareDate(context, nameof(SomeJob));
⋮
}
Вам просто нужно добавить PerformContext
при добавлении задания, передав null
:
RecurringJobManager.AddOrUpdate(
recurringJobId: "1",
job: Job.FromExpression(() => SomeJob(null, CancellationToken.None)),
cronExpression: Cron.Hourly(15),
options: new RecurringJobOptions
{
TimeZone = TimeZoneInfo.Local
});
Примечание. Это будет работать только в том случае, если срок выполнения успешного задания еще не истек. Успешные задания истекают через один день - если вам нужно сохранить их дольше (чтобы получить свойство SucceededAt
), вот пример для этого: Как настроить время хранения задания?