at (named after the unix command) is a tool to run code later.
If that sounds a bit like async it's because it is. But at is a lot more flexible because it only uses one future and stores all the planned executing in a table, which can be persisted to disk. The result is a very flexible yet very simple table that can handle thousands of jobs.
I hope this is useful to you!
I could not find mention in your docs, but one possibly interesting application of this is for "regenerating scheduled tasks" - aka "cron jobs". More concretely, on Unix, at is implemented via cron, but one can also implement cron via at - simply via an at job which schedules its next cycle.
I am unsure this is common enough or that now + period is complex enough to warrant any specific API in a package as general as Bring Your Own Table, like your at, though it might be an interesting test/concept.
(Even in the physical universe, there are layers of sync-async|periodic-aperiodic phenomena from the bottom to the top, such as CPU phase locked loops/timer oscillator chips providing synchronous backing for async activity.)
Yeah I was going to mention repeating jobs as a possible future development, but forgot!
For now I would have a special table for repeating jobs that have a trigger proc that also adds the next job at an appropriate time, but this is a bit of a hack.
Will put it in the docs. Thanks for your feedback!
More like systemd-run --on-calendar ...
https://www.freedesktop.org/software/systemd/man/systemd-run.html