diff --git a/src/activities/Elsa.Activities.Timers/ActivityResults/ScheduleWorkflowResult.cs b/src/activities/Elsa.Activities.Timers/ActivityResults/ScheduleWorkflowResult.cs index 42c578770..a623e6746 100644 --- a/src/activities/Elsa.Activities.Timers/ActivityResults/ScheduleWorkflowResult.cs +++ b/src/activities/Elsa.Activities.Timers/ActivityResults/ScheduleWorkflowResult.cs @@ -2,8 +2,8 @@ using System.Threading; using System.Threading.Tasks; using Elsa.Activities.Timers.Services; using Elsa.ActivityResults; -using Elsa.Persistence; using Elsa.Services.Models; +using Microsoft.Extensions.DependencyInjection; using NodaTime; namespace Elsa.Activities.Timers.ActivityResults @@ -17,16 +17,20 @@ namespace Elsa.Activities.Timers.ActivityResults public Instant ExecuteAt { get; } - public override async ValueTask ExecuteAsync(ActivityExecutionContext activityExecutionContext, CancellationToken cancellationToken) + protected override void Execute(ActivityExecutionContext activityExecutionContext) { - var workflowInstance = activityExecutionContext.WorkflowExecutionContext.WorkflowInstance; - var workflowInstanceStore = activityExecutionContext.GetService(); - var scheduler = activityExecutionContext.GetService(); + var workflowInstanceId = activityExecutionContext.WorkflowExecutionContext.WorkflowInstance.Id; + var activityId = activityExecutionContext.ActivityBlueprint.Id; + var workflowBlueprint = activityExecutionContext.WorkflowExecutionContext.WorkflowBlueprint; + var executeAt = ExecuteAt; - if(workflowInstance.LastSavedAt == null) - await workflowInstanceStore.SaveAsync(workflowInstance, cancellationToken); - - await scheduler.ScheduleWorkflowAsync(activityExecutionContext.WorkflowExecutionContext.WorkflowBlueprint, workflowInstance.Id, activityExecutionContext.ActivityInstance.Id, ExecuteAt, cancellationToken); + async ValueTask ScheduleWorkflowAsync(WorkflowExecutionContext workflowExecutionContext, CancellationToken cancellationToken) + { + var scheduler = workflowExecutionContext.ServiceScope.ServiceProvider.GetRequiredService(); + await scheduler.ScheduleWorkflowAsync(workflowBlueprint, workflowInstanceId, activityId, executeAt, cancellationToken); + } + + activityExecutionContext.WorkflowExecutionContext.RegisterTask(nameof(ScheduleWorkflowResult), ScheduleWorkflowAsync); } } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Timers/Handlers/ScheduleWorkflows.cs b/src/activities/Elsa.Activities.Timers/Handlers/ScheduleWorkflows.cs new file mode 100644 index 000000000..39e3cfc0f --- /dev/null +++ b/src/activities/Elsa.Activities.Timers/Handlers/ScheduleWorkflows.cs @@ -0,0 +1,16 @@ +using System.Threading; +using System.Threading.Tasks; +using Elsa.Activities.Timers.ActivityResults; +using Elsa.Events; +using MediatR; + +namespace Elsa.Activities.Timers.Handlers +{ + public class ScheduleWorkflows : INotificationHandler + { + public async Task Handle(WorkflowSuspended notification, CancellationToken cancellationToken) + { + await notification.WorkflowExecutionContext.ExecuteRegisteredTasksAsync(nameof(ScheduleWorkflowResult), cancellationToken); + } + } +} \ No newline at end of file