using System.Runtime.CompilerServices; using Elsa.Expressions.Models; using Elsa.Extensions; using Elsa.Workflows; namespace Elsa.Scheduling.Activities; /// /// public abstract class TimerBase([CallerFilePath] string? source = null, [CallerLineNumber] int? line = null) : EventGenerator(source, line) { protected abstract TimeSpan GetInterval(ExpressionExecutionContext context); protected virtual ValueTask OnTimerElapsedAsync(ActivityExecutionContext context) { OnTimerElapsed(context); return default; } protected virtual void OnTimerElapsed(ActivityExecutionContext context) { } /// protected override void Execute(ActivityExecutionContext context) { var interval = GetInterval(context.ExpressionExecutionContext); context.RepeatWithInterval(interval, TimerElapsedAsync); } /// protected override object GetTriggerPayload(TriggerIndexingContext context) { var interval = GetInterval(context.ExpressionExecutionContext); return context.GetTimerTriggerStimulus(interval); } private async ValueTask TimerElapsedAsync(ActivityExecutionContext context) { await OnTimerElapsedAsync(context); await context.CompleteActivityAsync(); } }