feat(archival): ensure hangfired mediatr cmds have cancellation support

This commit is contained in:
Collin M. Barrett 2020-09-14 07:46:36 -05:00
parent 2c0dd92ac7
commit 6f1a04afd5

View file

@ -1,4 +1,5 @@
using System;
using System.Threading;
using Hangfire;
using MediatR;
using Newtonsoft.Json;
@ -10,12 +11,14 @@ public static class RequestExtensions
{
public static void EnqueueBackgroundJob(this IRequest request)
{
BackgroundJob.Enqueue<HangfireMediator>(m => m.Send(request));
// Hangfire replaces CancellationToken at runtime with its own. We just need any in the signature.
// https://docs.hangfire.io/en/latest/background-methods/using-cancellation-tokens.html#cancellationtoken
BackgroundJob.Enqueue<HangfireMediator>(m => m.Send(request, CancellationToken.None));
}
public static void AddOrUpdateRecurringJob(this IRequest request, Func<string> cronExpression)
{
RecurringJob.AddOrUpdate<HangfireMediator>(m => m.Send(request), cronExpression);
RecurringJob.AddOrUpdate<HangfireMediator>(m => m.Send(request, CancellationToken.None), cronExpression);
}
}
@ -54,9 +57,9 @@ public HangfireMediator(IMediator mediator)
_mediator = mediator;
}
public void Send(IRequest request)
public void Send(IRequest request, CancellationToken cancellationToken)
{
_mediator.Send(request);
_mediator.Send(request, cancellationToken);
}
}
}