Add StartIn convenience method to start / resume workflow in x amount of time

This commit is contained in:
Sipke Schoorstra 2020-11-27 21:59:28 +01:00
parent 41ca351d29
commit 2ff8d006f3
2 changed files with 7 additions and 1 deletions

View file

@ -12,5 +12,11 @@ namespace Elsa.Activities.Timers
public static IActivityBuilder StartAt(this IBuilder builder, Func<ActivityExecutionContext, Instant> instant) => builder.StartAt(setup => setup.Set(x => x.Instant, instant));
public static IActivityBuilder StartAt(this IBuilder builder, Func<Instant> 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<ActivityExecutionContext, Duration> timeout) => builder.StartAt(context => Now(context).Plus(timeout(context)));
public static IActivityBuilder StartIn(this IBuilder builder, Func<Duration> 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<IClock>().GetCurrentInstant();
}
}

View file

@ -22,7 +22,7 @@ namespace Elsa.Samples.Timers
workflow
.StartAt(_executeAt)
.WriteLine(context => $"Started at {context.GetService<IClock>().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<IClock>().GetCurrentInstant()}.");
}
}