Ensure long running tasks don’t block execution

Previously scheduled tasks are blocked from executing after a long running task is dispatched until either:
a) The task is complete, or
b) A new task is added.

This ensures that previously scheduled tasks can still be dispatched while another task is running.