Rewrote to use events, and manually handled checking to see if all tasks were completed.