Sleep
ctx.Sleep pauses a workflow for any duration — seconds or weeks. The run is parked in
Postgres and resumed by a worker when the timer fires, so it survives restarts, deploys,
and crashes. No thread, no worker slot, no memory is held while it sleeps.
await ctx.Activity((EmailActivities a) => a.SendWelcome(input.Email), cancellationToken);
await ctx.Sleep(TimeSpan.FromDays(11), cancellationToken);
await ctx.Activity((EmailActivities a) => a.SendTrialEndingReminder(input.Email), cancellationToken);