From the docs I gather that `@schedule operation()` is equivalent to `schedule(@task operation())`, In that `operation()` will be wrapped in a task and added as a runnable item in the scheduler queue.
`@async` says it wraps the expression in a closure rather than a task, but likewise adds it to the scheduler queue. It also adds it to the list of things that the enclosing `@sync` is waiting for, so that’s definitely another difference from `@schedule` What are the practical differences between wrapping an expression in a Task rather than a closure before adding it to the scheduler queue? -s
