Вы можете сделать что-то похожее на это:
public class ExpirationAttribute : JobFilterAttribute, IElectStateFilter
{
private int _hours;
public ExpirationAttribute(int hours)
{
_hours = hours;
}
public void OnStateElection(ElectStateContext context)
{
var processing = context.CandidateState as ProcessingState;
if (processing == null)
{
return;
}
if (DateTime.UtcNow - context.BackgroundJob.CreatedAt > TimeSpan.FromHours(_hours))
{
context.CandidateState = new SucceededState(new { }, 0, 0) { Reason = "Execution skipped due to expiration." };
}
}
}
Он просто перемещает задания после истечения срока их действия в успешные, а не обрабатывает их.Я вообще не проверял, но в целом должен быть правильным.