Encapsulate common logic to execute a task

Is there any reason not to re-use the common logic for executing a task? See changes for details. At the moment at least, the different Dispatcher types have nearly identical logic.