OptionalstartAt: Datewhen the cron expression or timezone is invalid (callers validate first via CronExpressionHelper.ValidateExpression / entity Validate()).
Compute the next run time for a routine: the first cron occurrence strictly after
fromDate, floored by the routine's activation-window start. When startAt is in the
future relative to fromDate, the next occurrence is computed from startAt instead —
an Active routine never gets a NextRunAt before its window opens.
For OneShot routines without a CronExpression, returns startAt ?? null.
For Adaptive routines without a CronExpression, returns startAt ?? null.
OptionalstartAt: DateOptionalscheduleMode: "Adaptive" | "OneShot" | "Recurring"when the cron expression or timezone is invalid (callers validate first via CronExpressionHelper.ValidateExpression / entity Validate()).
Compute the next run time for a routine: the first cron occurrence strictly after
fromDate, floored by the routine's activation-window start. WhenstartAtis in the future relative tofromDate, the next occurrence is computed fromstartAtinstead — an Active routine never gets a NextRunAt before its window opens.For
OneShotroutines without aCronExpression, returnsstartAt ?? null. ForAdaptiveroutines without aCronExpression, returnsstartAt ?? null.