using Elsa.Mediator.Contracts; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Models; namespace Elsa.Workflows.Runtime.Services; /// /// Invokes activities from a background worker within the context of its workflow instance using a local background worker. /// public class LocalBackgroundActivityScheduler : IBackgroundActivityScheduler { private readonly IJobQueue _jobQueue; private readonly IBackgroundActivityInvoker _backgroundActivityInvoker; /// /// Initializes a new instance of the class. /// public LocalBackgroundActivityScheduler(IJobQueue jobQueue, IBackgroundActivityInvoker backgroundActivityInvoker) { _jobQueue = jobQueue; _backgroundActivityInvoker = backgroundActivityInvoker; } /// public Task ScheduleAsync(ScheduledBackgroundActivity scheduledBackgroundActivity, CancellationToken cancellationToken = default) { var jobId = _jobQueue.Enqueue(async ct => await InvokeBackgroundActivity(scheduledBackgroundActivity, ct)); return Task.FromResult(jobId); } /// public Task CancelAsync(string jobId, CancellationToken cancellationToken = default) { _jobQueue.Cancel(jobId); return Task.CompletedTask; } private async Task InvokeBackgroundActivity(ScheduledBackgroundActivity scheduledBackgroundActivity, CancellationToken cancellationToken) { await _backgroundActivityInvoker.ExecuteAsync(scheduledBackgroundActivity, cancellationToken); } }