TaskEngine handles a list of tasks that are to be carried out.
A Task object represents a unit of work that is performed when the method run() is called.
virtual void run(TaskEngine &engine)=0
Does whatever work this task represents.
virtual void dispose()=0
Called when the task is no longer used but run has not and will not be called.