Some tasks need to be run once at a given time or the earliest opportunity, also currently, using interval == 0 on a task triggers a busy loop inside the scheduling task, halting progress for other tasks and any other work usually serviced by that thread.
This change deals with both issues at the same time.