From 2ff8d006f3e2f58b814f305252e3bb09186316be Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Fri, 27 Nov 2020 21:59:28 +0100 Subject: [PATCH] Add StartIn convenience method to start / resume workflow in x amount of time --- .../Activities/StartAt/StartAtBuilderExtensions.cs | 6 ++++++ src/samples/worker/Elsa.Samples.Timers/OneOffWorkflow.cs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAtBuilderExtensions.cs b/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAtBuilderExtensions.cs index d6de12899..5e0205b07 100644 --- a/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAtBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Timers/Activities/StartAt/StartAtBuilderExtensions.cs @@ -12,5 +12,11 @@ namespace Elsa.Activities.Timers public static IActivityBuilder StartAt(this IBuilder builder, Func instant) => builder.StartAt(setup => setup.Set(x => x.Instant, instant)); public static IActivityBuilder StartAt(this IBuilder builder, Func instant) => builder.StartAt(setup => setup.Set(x => x.Instant, instant)); public static IActivityBuilder StartAt(this IBuilder builder, Instant instant) => builder.StartAt(setup => setup.Set(x => x.Instant, instant)); + + public static IActivityBuilder StartIn(this IBuilder builder, Func timeout) => builder.StartAt(context => Now(context).Plus(timeout(context))); + public static IActivityBuilder StartIn(this IBuilder builder, Func timeout) => builder.StartAt(context => Now(context).Plus(timeout())); + public static IActivityBuilder StartIn(this IBuilder builder, Duration timeout) => builder.StartAt(context => Now(context).Plus(timeout)); + + private static Instant Now(ActivityExecutionContext context) => context.GetService().GetCurrentInstant(); } } \ No newline at end of file diff --git a/src/samples/worker/Elsa.Samples.Timers/OneOffWorkflow.cs b/src/samples/worker/Elsa.Samples.Timers/OneOffWorkflow.cs index e3b778fe6..8e02b2cb9 100644 --- a/src/samples/worker/Elsa.Samples.Timers/OneOffWorkflow.cs +++ b/src/samples/worker/Elsa.Samples.Timers/OneOffWorkflow.cs @@ -22,7 +22,7 @@ namespace Elsa.Samples.Timers workflow .StartAt(_executeAt) .WriteLine(context => $"Started at {context.GetService().GetCurrentInstant()}. Next event happens 3 seconds from now.") - .StartAt(_executeAt.Plus(Duration.FromSeconds(3))) + .StartIn(Duration.FromSeconds(3)) .WriteLine(context => $"Follow-up occurred at {context.GetService().GetCurrentInstant()}."); } }