Scheduling & Timers
The Restate SDK includes durable timers. You can use these to let handlers sleep for a specified time, or to schedule a handler to be called at a later time. These timers are resilient to failures and restarts. Restate stores and keeps track of the timers and triggers them on time, even across failures and restarts.
Scheduling Async Tasks
To schedule a handler to be called at a later time, have a look at the documentation on delayed calls.
Durable sleep
To sleep in a Restate application for ten seconds, do the following:
await ctx.sleep(delta=timedelta(seconds=10))
Restate suspends the handler while it is sleeping, to free up resources. This is beneficial for AWS Lambda deployments, since you don't pay for the time the handler is sleeping.
Virtual Objects only process a single invocation at a time, so the Virtual Object will be blocked while sleeping.
Clock synchronization Restate Server vs. SDK
The Restate SDK calculates the wake-up time based on the delay you specify. The Restate Server then uses this calculated time to wake up the handler. If the Restate Server and the SDK have different system clocks, the sleep duration might not be accurate. So make sure that the system clock of the Restate Server and the SDK have the same timezone and are synchronized.