Different approach
Refactured CancellableTask